2017-07-04 65 views
0

大家好日子,Magick ++轉換爲Mat Opencv時的問題

我有這個問題,我需要將Magick ++ Image轉換爲OpenCV Mat。雖然我成功地轉換了它,但是發生了Mat的顏色不正確的問題(請參閱附圖)。在我的情況下,我有一個PDF文件,我將其轉換爲Magick ++ Image逐頁,並使用我的圖像處理方法,我需要將其轉換爲OpenCV Mat。當我使用其他PDF文件時,顏色是正確的。我非常感謝在這個問題上的任何幫助,謝謝。 我的工作代碼顯示在下方,謝謝。 注:我使用的ImageMagick-7.0.6-Q16和OpenCV 2.4.11

try { 
    string fName = ""; 
    vector<Magick::Image> imageList; 
    cout << "Please Input the File name of the PDF." << endl; 
    cin >> fName; 
    cout << "Please wait while converting the PDF to Images...." << endl; 
    readImages(&imageList, fName); 
    bool isDecoded = false; 
    for (int i = 0; i < imageList.size(); i++){ 
     if (!isDecoded){ 

      int w = imageList[i].columns(); 
      int h = imageList[i].rows(); 

      Mat opencvImage(h,w,CV_8UC4); 

      imageList[i].write(0, 0, w, h, "RGBA" , Magick::CharPixel, opencvImage.data); 

      string decoded = QRScanner(opencvImage); 
      imshow("opencvImage", opencvImage); 
      if (decoded != ""){ 
       cout << "Result: " << decoded << endl; 
       isDecoded = true; 
      } 

      waitKey(); 
     } 
    } 
} 
catch (Magick::Exception &error_) 
{ 
    cout << "Caught exception: " << error_.what() << endl; 
} 
cout << "Convert Complete!" << endl; 
system("pause"); 

Sample Code Image Problem

+2

您似乎沒有附上圖像。另外,請發佈代碼的最小工作示例。 –

+1

請實際發佈代碼。在堆棧溢出中,您可以通過代碼將至少四個空格縮進整個代碼塊並插入到您的帖子中,從而讓代碼顯示它。人們更容易一起閱讀代碼和問題陳述,並且如果他們想要運行它,也可以讓其他人複製/粘貼代碼。幫助別人幫助你:)。無論哪種方式,渠道訂單有可能出現這種情況?大多數庫將圖像讀取爲RGB,但OpenCV使用BGR順序。你可以使用OpenCV中的'cvtColor()'。 –

+0

@AlexanderReynolds謝謝:)我對此很陌生。 – xSecur

回答

0

我覺得大部分的問題已經在上面的評論得到了解決,但我相信這可以通過調整OpenCV預期的頻道圖來快速修復。

imageList[i].write(0, 0, w, h, "BGRA" , Magick::CharPixel, opencvImage.data); 
           ^^^^ 

無需擔心cvtColor或否定,你已經可以控制數據流是如何出口。