[英]convert Qimage to cvMat 64FC3 format
我在互联网上进行了大量搜索,但是我只找到了如何将Qimage转换为RGB格式,我想将Qimage转换为简历格式CV_64FC3。 当我使用CV_8UC3时,我的结果非常糟糕
这是我的代码:
QImage myImage;
myImage.load("C://images//PolarImage300915163358.bmp");
QLabel myLabel;
myLabel.setPixmap(QPixmap::fromImage(myImage));
//myLabel.show();
cv::Mat image1 = QImage2Mat(myImage);
Mat img;
image1.convertTo(img, CV_64FC3, 1.0 / 255.0);
这是我使用的功能:
cv::Mat QImage2Mat(QImage const& src)
{
cv::Mat tmp(src.height(),src.width(),CV_8UC3,(uchar*)src.bits(),src.bytesPerLine());
cv::Mat result; // deep copy just in case (my lack of knowledge with open cv)
cvtColor(tmp, result,CV_BGR2RGB);
return result;
}
请帮助我即时了解opencv和Qt
不知道结果不好意味着什么,但是您假设QImage还将图像加载为OpenCV( BGR
)。 在文档中,它告诉您它们使用ARGB
。
因此,知道这一点,您有2个选择:
convertToFormat
函数将Qimage
转换为QImage::Format_RGB888
,然后将此行cvtColor(tmp, result,CV_BGR2RGB);
不需要,因为它将已经是RGB。 cv::Mat
时使用CV_8UC4
,然后使用split和join或mixchannels删除第一个通道(通道alpha)。 我发现了问题所在,实际上,Qimage有一个用于Alpha的第四通道,因此当您读取Qimage数据时,需要将其放入CV_8UC4
这是代码:
Mat QImage2Mat(const QImage& src) {
cv::Mat mat = cv::Mat(src.height(), src.width(), CV_8UC4, (uchar*)src.bits(), src.bytesPerLine());
cv::Mat result = cv::Mat(mat.rows, mat.cols, CV_8UC3 );
int from_to[] = { 0,0, 1,1, 2,2 };
cv::mixChannels( &mat, 1, &result, 1, from_to, 3 );
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.