Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Magick++;转换为Mat Opencv时出现问题_C++_Opencv_Image Processing_Imagemagick Convert_Magick++ - Fatal编程技术网

C++ Magick++;转换为Mat Opencv时出现问题

C++ Magick++;转换为Mat Opencv时出现问题,c++,opencv,image-processing,imagemagick-convert,magick++,C++,Opencv,Image Processing,Imagemagick Convert,Magick++,大家好, 我有这个问题,我需要将Magick++图像转换为OpenCV Mat。虽然我成功地将其转换,但出现了垫子颜色不正确的问题(请参见附图)。在我的例子中,我有一个PDF文件,我将其逐页转换为Magick++图像,要使用我的图像处理方法,我需要将其转换为OpenCV Mat。当我使用其他PDF文件时,颜色是正确的。我非常感谢在这个问题上的任何帮助,谢谢。 我的工作代码显示在下面,谢谢。 注:我使用ImageMagick-7.0.6-Q16和OpenCV 2.4.11 try { st

大家好,

我有这个问题,我需要将Magick++图像转换为OpenCV 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");
试试看{
字符串fName=“”;
向量图像列表;
cout fName;

cout我认为上面的评论已经解决了大部分问题,但我相信可以通过调整通道图使其符合OpenCV的预期来快速解决这个问题

imageList[i]。写入(0,0,w,h,“BGRA”,Magick::CharPixel,opencvImage.data);
^^^^

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

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