博客
关于我
使用QT显示OpenCV读取的图片
阅读量:261 次
发布时间:2019-03-01

本文共 2814 字,大约阅读时间需要 9 分钟。

OpenCV?QT?????

??

OpenCV?????????GUI?????????????????????????????GUI????????????????Qt?????OpenCV????????

????

?QtCreator???????QMainWindow?????????????QImageShowWidget?????????????QMainWindow?centralwidget??

????

header??

#ifndef QIMAGESHOWWIDGET_H
#define QIMAGESHOWWIDGET_H
#include
#include
class QImageShowWidget : public QWidget
{
Q_OBJECT
public:
explicit QImageShowWidget(QWidget *parent = nullptr);
~QImageShowWidget();
bool LoadImage(const char *imagePath);
protected:
void paintEvent(QPaintEvent *event);
void Release();
private:
uchar *winBuf;
int winWidth;
int winHeight;
int winBandNum;
};
#endif // QIMAGESHOWWIDGET_H

source??

#include "qimageshowwidget.h"
#include
#include
#include
#include
using namespace cv;
using namespace std;
QImageShowWidget::QImageShowWidget(QWidget *parent) : QWidget(parent)
{
setAutoFillBackground(true);
setBackgroundRole(QPalette::Base);
winBuf = nullptr;
winWidth = rect().width();
winHeight = rect().height();
winBandNum = 3;
}
QImageShowWidget::~QImageShowWidget()
{
if (winBuf)
{
delete[] winBuf;
winBuf = nullptr;
}
}
bool QImageShowWidget::LoadImage(const char *imagePath)
{
Mat img = imread(imagePath);
if (img.empty())
{
fprintf(stderr, "Can not load image %s\n", imagePath);
return false;
}
Release();
winWidth = rect().width();
winHeight = rect().height();
size_t winBufNum = (size_t)winWidth * winHeight * winBandNum;
winBuf = new uchar[winBufNum];
memset(winBuf, 255, winBufNum * sizeof(uchar));
for (int ri = 0; ri < img.rows; ++ri)
{
for (int ci = 0; ci < img.cols; ++ci)
{
for (int bi = 0; bi < winBandNum; ++bi)
{
size_t m = (size_t)winWidth * winBandNum * ri + winBandNum * ci + bi;
size_t n = (size_t)img.cols * winBandNum * ri + winBandNum * ci + bi;
winBuf[m] = img.data[n];
}
}
}
update();
return true;
}
void QImageShowWidget::paintEvent(QPaintEvent *event)
{
if (!winBuf)
{
return;
}
QImage::Format imgFormat = QImage::Format_RGB888;
QPainter painter(this);
QImage qImg(winBuf, winWidth, winHeight, winWidth * winBandNum, imgFormat);
painter.drawPixmap(0, 0, QPixmap::fromImage(qImg));
}
void QImageShowWidget::Release()
{
if (winBuf)
{
delete[] winBuf;
winBuf = nullptr;
}
}

????

?????QImageShowWidget

QImageShowWidget???QWidget?????????????????LoadImage??????????paintEvent?????????

??????

??QPainter??QImage?????winBuf??????????OpenCV?Mat???winBuf????????????????????

????

???????????????????????????

转载地址:http://qawx.baihongyu.com/

你可能感兴趣的文章
msf
查看>>
MSP430F149学习之路——SPI
查看>>
msp430入门编程45
查看>>
MSSQL数据库查询优化(一)
查看>>
MSSQL数据库迁移到Oracle(二)
查看>>
MSSQL日期格式转换函数(使用CONVERT)
查看>>
MSTP多生成树协议(第二课)
查看>>
MSTP是什么?有哪些专有名词?
查看>>
Mstsc 远程桌面链接 And 网络映射
查看>>
Myeclipse常用快捷键
查看>>
MyEclipse更改项目名web发布名字不改问题
查看>>
MyEclipse用(JDBC)连接SQL出现的问题~
查看>>
mt-datetime-picker type="date" 时间格式 bug
查看>>
myeclipse的新建severlet不见解决方法
查看>>
MyEclipse设置当前行背景颜色、选中单词前景色、背景色
查看>>
Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
查看>>
myeclipse配置springmvc教程
查看>>
MyEclipse配置SVN
查看>>
MTCNN 人脸检测
查看>>
MyEcplise中SpringBoot怎样定制启动banner?
查看>>