我发现非常类似的主题:how to convert an opencv cv::Mat to qimage,但它不能解决我的问题。cv :: Mat到QImage的转换
我有功能转换CV ::垫的QImage
QImage cvMatToQImg(cv::Mat& mat)
{
cv::Mat rgb;
if(mat.channels()==1)
{
cv::cvtColor(mat,rgb,CV_GRAY2BGR);
cv::cvtColor(rgb,rgb,CV_BGR2BGRA);
QImage temp = QImage((unsigned char*)(rgb.data), rgb.cols,
rgb.rows,QImage::Format_ARGB32);
QImage returnImage = temp.copy();
return returnImage;
}
而且它适合我的,但我想使它更有效率。 第一:为什么改变2种cvtColor功能有:
cv::cvtColor(mat,rgb,CV_GRAY2BGRA)
失败的
QImage returnImage = temp.copy()
与段错误。
然后如何消除QImage的复制。当我简单地返回临时图像时,我正在收到段错误。
任何其他优化可以在那里完成?这是经常使用的功能,所以我想尽可能快地使用它。
您还没有指定'mat'的图像格式,它甚至是一个24位灰度图像? – cmannett85
大部分我正在使用8bit灰度。但是,越多的案件功能越好。 – krzych
没有必要复制。 QImage是共享指针。 Segfauld不是因为不复制,而是由于对齐不正确。有类似的QImage的构造函数,每行指定附加字节 - 使用这个。 P.S:通过谷歌搜索发现:http://code.google.com/p/qt-opencv-multithreaded/source/browse/trunk/src/MatToQImage.cpp?r=75 –