先下载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
#include "opencv2/opencv.hpp"
#include
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