先下载opencv sdk, 官网下载链接:Releases - OpenCV  选择相应的版本,本篇博客是用的4.5.4版本,下载解压后,找到相应的include, lib,dll,  类似于平常的SDK在vs下的配置, 包含头文件,lib。

        新建一个Qt GUI项目,用QLabel可以显示OpenCV的Mat图片,  Qt界面如下:

       点击按钮加载图片并显示,代码如下:

#pragma execution_character_set("utf-8")

#include "demo01.h"
#include <QFileDialog>
#include "opencv2/opencv.hpp"
#include <string>

using namespace std;
using namespace cv;


QString str2qstr(const string& str)
{
    return QString::fromLocal8Bit(str.data());
}

string qstr2str(const QString& qstr)
{
    QByteArray cdata = qstr.toLocal8Bit();
    return string(cdata);
}

demo01::demo01(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);

    ui.label_mat->setText("");
    ui.label_mat->setStyleSheet("background-color:rgb(54,54,54)");
}

void demo01::on_btnSelect_clicked()
{
    QString file = QFileDialog::getOpenFileName(
        this, "选择要播放的文件",
        "/",
        "视频文件 (*.png *.jpg *.jpeg *.PNG);; 所有文件 (*.*);; ");

    if (file.isEmpty())
    {
        return;
    }

    ui.lineEdit->setText(file);

    int wid = ui.label_mat->width();
    int hig = ui.label_mat->height();

    //file.toStdString();  //中文乱码,会导致Mat对象为空
    string file_name = qstr2str(file);  

    cv::Mat src = imread(file_name);
    cvtColor(src, src, COLOR_RGBA2RGB); 

    int channels = src.channels(); //注意通道数,选择合适的QImage格式

    //Mat格式转为QImage
    QImage img = QImage((const unsigned char*)(src.data), src.cols, src.rows, QImage::Format_RGB888);

    //QLabel显示图片
    ui.label_mat->setPixmap(QPixmap::fromImage(img));
}

        OpenCV读取图片后返回的是Mat类对象,该类保存了图像的一些参数,例如行数,列数,图像数据。

//! the number of rows and columns or (-1, -1) when the matrix has more than 2 dimensions
int rows, cols;

//! pointer to the data
uchar* data;

         Mat可以转化成QImage,  再用QLabel就可以显示了,如下图:

更新于2021-12-14,致敬 浅墨_毛星云  https://blog.csdn.net/poem_qianmo/category_1923021.html

    

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐