【问题标题】:Magick++ Issue when converting to Mat Opencv转换为 Mat Opencv 时的 Magick++ 问题
【发布时间】:2017-07-04 05:20:39
【问题描述】:

大家好,

我有这个问题,我需要将 Magick++ 图像转换为 OpenCV 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

【问题讨论】:

  • 您似乎没有附加图片。另外,请发布您的代码的最小工作示例。
  • 请实际发布代码。在 Stack Overflow 上,您可以通过将整个代码块缩进至少四个空格并插入到您的帖子中来通过代码显示它。人们更容易一起阅读代码和问题陈述,并且如果其他人想尝试运行它,也可以复制/粘贴您的代码。帮助别人帮助你:)。无论哪种方式,通道的顺序都可能是这里的问题吗?大多数库将图像读取为 RGB,但 OpenCV 使用 BGR 顺序。您可以使用 OpenCV 中的cvtColor()
  • @AlexanderReynolds 谢谢 :) 我是新手。
  • @AlexanderReynolds 我尝试了 Opencv 的 cvtColor,但颜色仍然不在正确的位置。包含 QRCode 的背景仍为黑色。谢谢顺便说一句
  • 你是如何使用cvtColor()的?我很确定您是按 R、G、B 顺序而不是 B、G、R 顺序编写频道,所以在显示之前cvtColor(image, image, cv::COLOR_RGBA2BGRA) 应该可以工作。

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


【解决方案1】:

我认为上面的 cmets 已经解决了大部分问题,但我相信可以通过将通道映射调整到 OpenCV 的预期来快速解决这个问题。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2017-12-24
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多