当前位置: 首页 > news >正文

10.OpenCV—联合QT界面显示

1.显示在graphicsView控件上

.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>#include <QGraphicsPixmapItem>  //1.声明头文件
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();void testOpenCV();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;// 2.创建场景和像素图项QGraphicsScene* scene;
};#endif // MAINWINDOW_H

.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <qdebug.h>
#include "opencv2/opencv.hpp"using namespace cv;//#include <QImage>
//#include <QPixmap>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);testOpenCV(); // 新增调用// 2.创建场景和像素图项scene = new QGraphicsScene();}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{// 3.读取OpenCV图像Mat src = imread("1.jpg");if (src.empty()) return;  // 检查图像是否加载成功// 4.将BGR格式转换为RGB格式Mat rgb;cvtColor(src, rgb, cv::COLOR_BGR2RGB);// 5.创建QImage并确保深拷贝数据QImage img(rgb.data,             // 数据指针rgb.cols,             // 宽度rgb.rows,             // 高度rgb.step,             // 每行字节数QImage::Format_RGB888 // RGB888格式);//6.QImage imageCopy = img.copy(); // 深拷贝以避免数据失效// 7.清除旧场景并设置新场景if (ui->graphicsView->scene()) {delete ui->graphicsView->scene(); // 删除旧场景防止内存泄漏}//8.将图像添加到场景中scene->addPixmap(QPixmap::fromImage(img));scene->setSceneRect(0, 0, img.width(), img.height());//9.在控件上显示ui->graphicsView->setScene(scene);}//模板匹配程序
void MainWindow:: testOpenCV()
{
//    cv::Mat img = cv::imread("1.jpg");
//    if(!img.empty()) {
//        qDebug() << "OpenCV配置成功!图像尺寸:"
//                 << img.cols << "x" << img.rows;
//        cv::imshow("Display", img);
//        cv::waitKey(0);
//    } else {
//        qDebug() << "加载图片失败!";
//    }//    // 读取待测图像
//    Mat image = imread("1.jpg");
//    // 读取模板图像
//    Mat templ = imread("3.jpg");
//    // 定义匹配结果变量
//    Mat result;
//    // 创建一个基于待测图像(W-w+1) * (H-h+1)
//    int cols = image.cols - templ.cols + 1;
//    int rows = image.rows - templ.rows + 1;
//    // 创建了一个32位浮点型单通道的矩阵
//    result.create(cols, rows, CV_32FC1);//    // 调用模板匹配的函数
//    matchTemplate(image, templ, result, CV_TM_SQDIFF);//    // 对匹配结果进行归一化操作
//    normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());
//    double minVal = -1;
//    double maxVal = 0;
//    Point minLoc;
//    Point maxLoc;
//    Point matchLoc;
//    // 获取最小指针值
//    minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
//    qDebug() << "匹配度为:" << minVal << endl;
//    // 给匹配位置变量赋值
//    matchLoc = minLoc;
//    // 绘制匹配矩形
//    rectangle(image, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar(0, 255, 0), 2, 8, 0);//    // 把绘制后的结果显示
//    namedWindow("匹配后图像显示窗口", WINDOW_AUTOSIZE);
//    imshow("匹配后图像显示窗口", image);
//    waitKey(0);
}//显示参考程序
//{
//#include <QGraphicsPixmapItem>
//#include <QImage>
//#include <QPixmap>//connect(ui->pushButton, &QPushButton::clicked, [&]() {
//    // 读取OpenCV图像
//    cv::Mat src = cv::imread("1.jpg");
//    if (src.empty()) return;  // 检查图像是否加载成功//    // 将BGR格式转换为RGB格式
//    cv::Mat rgb;
//    cv::cvtColor(src, rgb, cv::COLOR_BGR2RGB);//    // 创建QImage并确保深拷贝数据
//    QImage img(
//        rgb.data,             // 数据指针
//        rgb.cols,             // 宽度
//        rgb.rows,             // 高度
//        rgb.step,             // 每行字节数
//        QImage::Format_RGB888 // RGB888格式
//    );
//    QImage imageCopy = img.copy(); // 深拷贝以避免数据失效//    // 创建场景和像素图项
//    QGraphicsScene* scene = new QGraphicsScene();
//    QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(imageCopy));
//    scene->addItem(item);//    // 清除旧场景并设置新场景
//    if (ui->graphicsView->scene()) {
//        delete ui->graphicsView->scene(); // 删除旧场景防止内存泄漏
//    }
//    ui->graphicsView->setScene(scene);//    // 自适应缩放显示
//    ui->graphicsView->fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
//});
//}

相关文章:

  • Spring Boot 自动配置原理深度解析与自定义 Starter 实战
  • 3.1.2_栈的顺序存储实现
  • Nature Machine Intelligence 北京通研院朱松纯团队开发视触觉传感仿人灵巧手,实现类人自适应抓取
  • 深度解析Vue.js组件开发与实战案例
  • JavaSE超详细笔记-网络编程篇-基于黑马
  • evo工具
  • 【Git】使用 SSH 协议 解决 Git 推送失败问题
  • OPPO闹钟失灵:用户信任崩塌,市场地位岌岌可危
  • LangChain面试内容整理-知识点12:检索器(Retriever)接口与实现
  • Python开发功能实用
  • Android平台如何高效移动RTMP|RTSP直播流的录像文件?
  • 软死锁的检测--看门狗
  • uniapp打包报错
  • 渲染学进阶内容——机械动力的渲染系统(2)
  • 一文详解前缀和:从一维到二维的高效算法应用
  • 历史数据分析——贵州茅台
  • [学习] FIR多项滤波器的数学原理详解:从多相分解到高效实现(完整仿真代码)
  • 浏览器 报502 网关错误,解决方法2
  • RK全志平台LCD设备调试思路
  • MySQL使用EXPLAIN命令查看SQL的执行计划
  • 网站原型图展示/网站建设公司大全
  • wordpress twenty fourteen主题做的演示网站/常州网站建设书生商友
  • wordpress 很好的博客/武汉服装seo整站优化方案
  • 网站会员系统怎么做/百度收录哪些平台比较好
  • 京东商城在线网上购物/湖北搜索引擎优化
  • 做数据库与网站招什么人/重庆seo网络推广