换行符编码错误,linux是lf,windows下面要用cr lf,一般IDE可以支持切换,如果不行的话,用vscode打开,右下角切换下换行符保存就行
这个方法对以上的三个方法进行了改进,添加了四通道判断功能。
1、转换函数
QImage MainWindow::MatToQImageMultichannel(const cv::Mat &mat) {
QImage image;
switch(mat.type()) {
//8bit,四通道
case CV_8UC4:{
image = QImage(mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB32);//step:每一维元素的大小,单位字节
return image;
}
//8bit,三通道
case CV_8UC3:{
image = QImage(mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);//step:每一维元素的大小,单位字节
return image;
}
//8bit,单通道
case CV_8UC1: {
static QVector<QRgb> sColorTable;
if(sColorTable.isEmpty()) {
for(int i = 0; i < 256; ++i) {
sColorTable.push_back(qRgb(i, i, i)); //如果打开的图片是空的,就自己填充色彩
}
}
image = QImage((const unsigned char*)(mat.data),
mat.cols, mat.rows, mat.step,
QImage::Format_Indexed8);
image.setColorTable(sColorTable);//转换成qt调色板
}
default:
qDebug("没有支持的图片格式: depth=%d 和 %d channels\n", mat.depth(), mat.channels());
break;
}
return QImage();
}
2、调用
qImage = MatToQImageMultichannel(dstImage);
3、效果
好了,到这里你们是不是已经学会了QT 和 OpenCV混合使用显示图片了呢,下面我将代码贴上。
一般是编码问题,在编辑里面选择编码,可以采用gb2312