zoukankan      html  css  js  c++  java
  • QImage 与 Mat 互转

    QImage 转 Mat

    //Qt读入彩色图后一般为Format_RGB32格式(4通道),而OpenCV一般用3通道的,因此进行了转换。
    cv::Mat QImage2Mat(QImage image)
    {
        cv::Mat mat;
        switch (image.format())
        {
        case QImage::Format_RGB32:  //一般Qt读入彩色图后为此格式
            mat = cv::Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(), image.bytesPerLine());
            cv::cvtColor(mat,mat,cv::COLOR_BGRA2BGR);   //转3通道
            break;
        case QImage::Format_RGB888:
            mat = cv::Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine());
            cv::cvtColor(mat,mat,cv::COLOR_RGB2BGR);
            break;
        case QImage::Format_Indexed8:
            mat = cv::Mat(image.height(), image.width(), CV_8UC1, (void*)image.constBits(), image.bytesPerLine());
            break;
        }
        return mat;
    }

     Mat 转 QImage

    QImage Mat2QImage(const cv::Mat &mat)
    {
        if(mat.type()==CV_8UC1 || mat.type()==CV_8U)
        {
            QImage image((const uchar *)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_Grayscale8);
            return image;
        }
        else if(mat.type()==CV_8UC3)
        {
            QImage image((const uchar *)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
            return image.rgbSwapped();  //r与b调换
        }
    }
  • 相关阅读:
    harbor私有仓库搭建
    为普通用户添加sudo权限
    进程节点占用磁盘空间
    influxdb做prometheus永久存储
    prometheus监控linux进程
    Redis一主两从搭建
    ELK搭建
    redis geo操作
    k8s 1.16.3 yaml声明变化
    k8s启动Pod遇到CrashLoopBackOff的解决方法
  • 原文地址:https://www.cnblogs.com/xixixing/p/15797971.html
Copyright © 2011-2022 走看看