C++ QT5中cv::Mat转化为QImage

摘要:
///将Mat转换为QImageQImagescan::Mat2QImage(constcv::Mat&Mat){QImageimg;intchana=Mat.channels();///如果(chana˃1){//img=QImage(static_cast<uchar*>(Mat.data),Mat.cols,Mat.rows,QImage::Format_RG
/// 转化Mat为QImage
QImage scan::Mat2QImage(const cv::Mat& mat)
{
    QImage img;
    int chana = mat.channels();
    /// 依据通道数不同,改变不同的装换方式
    if (chana > 1) {
        //img = QImage(static_cast<uchar *>(mat.data),mat.cols,mat.rows,QImage::Format_RGB888);
        cv::cvtColor(mat, mat, CV_BGR2RGB);
        /// construct the QImage using the data of the mat, while do not copy the data
        img = QImage((const uchar*)(mat.data),
            mat.cols,
            mat.rows,
            mat.step,//TmpMat.cols*TmpMat.channels(),
            QImage::Format_RGB888);
    }
    else if (4 == chana) {
        cv::cvtColor(mat, mat, CV_BGR2RGB);
        /// construct the QImage using the data of the mat, while do not copy the data
        img = QImage((const uchar*)(mat.data),
            mat.cols,
            mat.rows,
            mat.step,//TmpMat.cols*TmpMat.channels(),
            QImage::Format_ARGB32);
    }
    else {
        /// 单通道,灰度图
        img = QImage(mat.cols, mat.rows, QImage::Format_Indexed8);
        uchar* matdata = mat.data;
        for (int row = 0; row < mat.rows; ++row) {
            uchar* rowdata = img.scanLine(row);
            memcpy(rowdata, matdata, mat.cols);
            matdata += mat.cols;
        }

        QVector<QRgb>  colorTable;

        for (int k = 0;k < 256;++k)
        {
            colorTable.push_back(qRgb(k, k, k));
        }

        img.setColorTable(colorTable);
    }
    img.bits();
    return img;
}

免责声明:文章转载自《C++ QT5中cv::Mat转化为QImage》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇k8s Rabbitmq安装部署在OC项目工程中混编Swift下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

天气插件(vue)和风天气插件

&lt:“center”:“left”:&lt:v=2.0(函数(d){varc=d.createElement('link')c.rel='stylesheet'.href='http://t.zoukankan.com/https;v=1.4.0'vars=d.createElement;...

OpenWrt路由器通过LuCI界面实现Guest SSID功能

此外,OpenWrt路由器上的访客SSID不会受到主SSID的MAC地址过滤功能的影响,这是番茄路由器的优势。...

10 TCP限流技术

TCP流限制的原因是接收方可以完全接受消息,以确保数据安全而不会丢失。首先,窗口机制引入了发送方和接收方都有一个窗口。当发送方发送数据时,将发送落入窗口中的数据。当接收器接收到数据时,落入接收器窗口的数据将被接受。可以看出,流量会受到窗口大小II的限制。滑动窗口技术1TCP滑动窗口技术通过动态改变窗口大小来调整两台主机之间的数据传输。...

MAC连接安卓手机通过adb指令安装apk

安卓apk可以通过adb命令安装。在MAC计算机上,如果你想通过命令行在Android手机上安装apk,你需要执行以下操作:;总之,将Android SDK的adb命令添加到环境变量中,然后通过adbin stall将apk从计算机安装到手机。最终安装过程中出现问题:无效APKfile解决方案:将要安装的APK文件放入平台工具文件,然后再次输入命令以成功安装...

doxygen使用详解

而doxygen就能把遵守某种格式的注释自动转化为对应的文档。以下以linux下的C++语言为例进行介绍,以下讨论基于doxygen1.3.3。Doxygen的使用步骤非常简单。具体如何写doxygen认识的注释在第3节详细介绍。EXTRACT_ALLNO为NO,只解释有doxygen格式注释的代码;为YES,解析所有代码,即使没有注释。可以有多种方式标识出...

Visual Studio 2013新建工程导入现有代码文件夹并且保持目录结构

本文提供了一个在Windows环境下使用VisualStudio2013编辑现有源代码并且保持目录结构的方法。打开VS2013,选择--选择项目类型:VisualC++项目文件位置:创建完成后会在这个目录生成sln,suo,vcxproj,filters和user等VS解决方案和项目文件,这个必须和源代码的根目录保持一致,否则不能导入文件夹结构。解决方法是添...