博客
关于我
使用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/

你可能感兴趣的文章
Objective-C实现tanh函数功能(附完整源码)
查看>>
Objective-C实现z-algorithm算法(附完整源码)
查看>>
Objective-C实现Zeller 的同余算法 (附完整源码)
查看>>
Objective-C实现zellers congruence泽勒一致算法(附完整源码)
查看>>
Objective-C实现Zero One Knapsack零一背包计算算法(附完整源码)
查看>>
Objective-C实现一个Pangram字符串至少包含一次所有字母算法(附完整源码)
查看>>
Objective-C实现一个通用的堆算法(附完整源码)
查看>>
Objective-C实现一分钟倒计时(附完整源码)
查看>>
Objective-C实现三次样条曲线(附完整源码)
查看>>
Objective-C实现上传文件到FTP服务器(附完整源码)
查看>>
Objective-C实现两数之和问题(附完整源码)
查看>>
Objective-C实现中值滤波(附完整源码)
查看>>
Objective-C实现中文模糊查询(附完整源码)
查看>>
Objective-C实现串口通讯(附完整源码)
查看>>
Objective-C实现串逐位和(附完整源码)
查看>>
Objective-C实现主存储器空间的分配和回收(附完整源码)
查看>>
Objective-C实现乘方运算---m的n次方(附完整源码)
查看>>
Objective-C实现二分查找最接近的数值m(附完整源码)
查看>>
Objective-C实现二叉树层序遍历(附完整源码)
查看>>
Objective-C实现二叉树遍历算法(附完整源码)
查看>>