网上有很多QImage和Mat的相互转换的代码
如:
http://blog.sina.com.cn/s/blog_7559ce850100ydvy.html
http://hi.baidu.com/windroc/item/5c4b4a13725c11433a176eca
但这些代码都存在一个问题
就是处理png图片时,透明部分显示为黑色
经过认真自己的研究和修改尝试
终于搞定
1、QImage to Mat
cv::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_8UC4 );
int from_to[] = { 0,0, 1,1, 2,2 ,3, 3 };
cv::mixChannels( &mat, 1, &mat2, 1, from_to, 4 );
return mat2;
}
2、Mat to QImage
template<typename T>
inline QImage const reference_mat_to_qimage(cv::Mat &mat, QImage::Format format)
{
return QImage((T*)(mat.data), mat.cols, mat.rows, mat.step, format);
}
QImage const copy_mat_