【发布时间】:2012-06-16 10:42:41
【问题描述】:
我找到了非常相似的主题:how to convert an opencv cv::Mat to qimage,但它并没有解决我的问题。
我有将 cv::Mat 转换为 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的图片格式,还是24bit灰度图吗? -
我主要使用 8 位灰度。但功能处理的案例越多越好。
-
无需复制。 QImage 是共享指针。 Segfauld 不是由于不复制,而是似乎是由于不正确的对齐。 QImage 有类似的构造函数,每行指定额外的字节 - 使用它。 P.S:通过谷歌搜索找到:code.google.com/p/qt-opencv-multithreaded/source/browse/trunk/…