2017-07-04 68 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或否定,你已经可以控制数据流是如何出口。