我發現非常類似的主題: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 –