QT和Opencv处理

img


请问遇到这些问题了吗?打开其他人的代码,错误很多,但是看着又没啥错。

换行符编码错误,linux是lf,windows下面要用cr lf,一般IDE可以支持切换,如果不行的话,用vscode打开,右下角切换下换行符保存就行

img

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/275399
  • 这篇博客也不错, 你可以看下Qt 用Opencv导入图像后,重新缩放图片,储存图片
  • 除此之外, 这篇博客: QT和OpenCV混合使用显示图片中的 (4)、单通道、三通道、四通道改进 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这个方法对以上的三个方法进行了改进,添加了四通道判断功能。
    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、效果
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SwlnbwiC-1593095845959)(./1593094715891.png)]

    好了,到这里你们是不是已经学会了QT 和 OpenCV混合使用显示图片了呢,下面我将代码贴上。

  • 您还可以看一下 禾路老师的基于QT和OpenCV实现Linux平台下图像处理课程中的 课程总览和内容划分小节, 巩固相关知识点

一般是编码问题,在编辑里面选择编码,可以采用gb2312