mat转为QImage
常见的图形数据颜色有:
黑白---->即只用8位数据描述,CV_8UC1,0表示黑色,255表示白色
彩色----->即用RGB表示,如下:
CV_8UC3即三通道,也就是对应RGB888
CV_8UC4即四通道, 对应ARGB888
QImage::QImage(uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
参数说明:
uchar *data:像素数据哪来 ,使用mat.data获取
int width:宽度 ,mat.cols来获取列数
int height:高度 ,mat.rows来获取行数
QImage::Format format :转换成什么格式
QImage opencv_test::Mat2QImage(Mat cvImg)
{
QImage qImg;
if(cvImg.channels()==3) //3 channels color image,这里可以换成 if(cvImg.type()==CV_8UC3)
{
cv::cvtColor(cvImg,cvImg,COLOR_BGR2RGB);//BGR---->RGB Opencv是BGR格式,所以得转换为RGB
qImg =QImage((const unsigned char*)(cvImg.data),
cvImg.cols, cvImg.rows,
cvImg.cols*cvImg.channels(),
QImage::Format_RGB888);
}
else if(cvImg.channels()==1) //grayscale image
{
qImg =QImage((const unsigned char*)(cvImg.data),
cvImg.cols,cvImg.rows,
cvImg.cols*cvImg.channels(),
QImage::Format_Indexed8);
}
else
{
qImg =QImage((const unsigned char*)(cvImg.data),
cvImg.cols,cvImg.rows,
cvImg.cols*cvImg.channels(),
QImage::Format_RGB888);
}
return qImg;
}