转换为Mat Opencv时的Magick ++问题

时间:2017-07-04 05:20:40

标签: c++ opencv image-processing imagemagick-convert magick++

大家好日子,

我有这个问题,我需要将Magick ++图像转换为OpenCV Mat。虽然我成功转换了它但是问题出现了Mat的颜色不正确(请参见附图)。在我的情况下,我有一个PDF文件,我逐页将其转换为Magick ++图像并使用我的图像处理方法,我需要将其转换为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

1 个答案:

答案 0 :(得分:0)

我认为上述评论中已解决了大部分问题,但我相信通过将频道图调整为OpenCV的预期,可以快速解决这个问题。

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

无需担心cvtColor或否定,因为您已经可以控制数据流的导出方式。