大家好日子,
我有这个问题,我需要将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");
答案 0 :(得分:0)
我认为上述评论中已解决了大部分问题,但我相信通过将频道图调整为OpenCV的预期,可以快速解决这个问题。
imageList[i].write(0, 0, w, h, "BGRA" , Magick::CharPixel, opencvImage.data);
^^^^
无需担心cvtColor
或否定,因为您已经可以控制数据流的导出方式。