将Qimage转换为cvMat 64FC3格式
convert Qimage to cvMat 64FC3 format
我在互联网上搜索了很多,但我只找到了如何将Qimage转换为RGB格式,我想将Qiimage转换为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
。
所以,知道这一点,你有两个选择:
- 使用函数
convertToFormat
将Qimage
转换为QImage::Format_RGB888
,然后不需要这行cvtColor(tmp, result,CV_BGR2RGB);
,因为它已经是RGB - 创建
cv::Mat
时使用CV_8UC4
,然后使用split and 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;
}
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 将"打开的CV图像"中的"颜色"转换为整数格式
- TDateTime格式在C++Builder中不会更改
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 检查不带转换的扫描格式
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 是否可以从格式字符串中检索"width"
- clang格式:宏的缩进
- clang格式:禁用排序包含
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 将RGB图像保存为PPM格式
- 询问在设计我的手臂模拟器功能表示格式1
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 如何将strftime中的格式错误作为异常捕获
- 将CHW格式的浮点向量转换为cv::Mat
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 如何以叮当格式设置评论的行长?
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 将Qimage转换为cvMat 64FC3格式