Qt:OpenCV::Mat与Qt::QImage相互转换

版权声明:假装这里有个版权声明…… https://blog.csdn.net/CV_Jason/article/details/89143911

前言

  Qt和OpenCV是一对形影不离的好基友(哥俩都开源,Qt又跨平台,Linux环境友好),但OpenCV的最常用的类Mat无法直接用于Qt的QImage中,原因在于,两者对图片定义和操作有所不同——Mat的主要功能是矩阵运算,拥有数之不尽的数据类型,包罗万象;而QImage侧重于图片显示,更多的操作是在图形界面上。
  因此,Mat与QImage之间的传值,要多一步转换操作。

Mat转QImage

QImage mat2qim(Mat & mat)
{
	cvtColor(mat, mat, COLOR_BGR2RGB);
	QImage qim((const unsigned char*)mat.data, mat.cols, mat.rows, mat.step, 
		QImage::Format_RGB888);
	return qim;
}

  利用QImage提供的构造函数,可以直接转化,但是要注意,Mat默认的是BGR空间,而QImage是RGB,所以使用cvtColor函数预处理一下。

QImage转Mat

Mat qim2mat(QImage & qim)
{
	Mat mat = Mat(qim.height(), qim.width(), 
		CV_8UC3,(void*)qim.constBits(),qim.bytesPerLine());
	return mat;
}

  同理,利用Mat的构造函数实现QImage往Mat的转换,但是要注意,QImage的通道数和数据类型,一般而言默认的是三通道八位无符号数,即CV_8UC3

猜你喜欢

转载自blog.csdn.net/CV_Jason/article/details/89143911