【发布时间】:2016-09-19 23:53:23
【问题描述】:
我想将图像从 cvMat 类型转换为 Qimage ,使用我的实际代码应用程序不起作用;我以另一种方式做到了(Qimage to Mat 工作正常) 请告诉我我的代码出了什么问题
这是我的 Qimage 到 Mat 的代码:
Mat qimage2mat(const QImage& qimage) {
cv::Mat mat = cv::Mat(qimage.height(), qimage.width(), CV_8UC4, (uchar*)qimage.bits(), qimage.bytesPerLine());
cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC3 );
int from_to[] = { 0,0, 1,1, 2,2 };
cv::mixChannels( &mat, 1, &mat2, 1, from_to, 3 );
return mat2;
}
这是我的 Mat 到 Qimage 的代码
QImage mat2qimage(const Mat& mat) {
Mat rgb;
cvtColor(mat, rgb, CV_BGR2RGB);
return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888);
}
提前谢谢你
【问题讨论】:
-
Mat rgb超出范围并在函数末尾被删除。复制图像数据或从mat转换,寿命更长。 -
你能发送解释我如何复制数据
-
或者,便宜的解决方案,用
new创建一个Mat * rgb。
标签: c++ qt opencv qimage opencv-mat