1. 项目准备

在本项目中,我们将使用Qt框架与Halcon库结合,展示图像并进行图像处理。首先,确保你已经配置好Qt和Halcon的开发环境。

环境配置可查看上篇文章

2. 创建Qt界面

在Qt中,创建一个窗口并拖入按钮和Graphics View控件。Graphics View控件将用于显示Halcon的图像。设置布局使控件能够自动调整大小和位置。

3. 设置Halcon窗口句柄

mainwindow.h中,我们定义一个全局的Halcon窗口句柄hv_window,用于在其他函数中访问和操作Halcon窗口。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "HalconCpp.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;// 创建Halcon窗口句柄HalconCpp::HTuple hv_window;
};
#endif // MAINWINDOW_H

4. 绑定Halcon窗口和Qt控件

MainWindow的构造函数中,我们使用HalconCpp::OpenWindow函数将Halcon的窗口与Qt的Graphics View控件绑定。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "HalconCpp.h"
#include <QDebug>
using namespace HalconCpp;MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 打开Halcon窗口并绑定到Qt控件HalconCpp::OpenWindow(0, 0, 500, 500, static_cast<Hlong>(ui->graphicsView->winId()), "", "", &hv_window);
}MainWindow::~MainWindow()
{delete ui;
}

此时,你应该能看到一个黑色窗口,表示Halcon窗口已经成功绑定到Qt控件上。

5. 加载并显示图像

在按钮的响应函数中,我们加载一张图像,并使用HalconCpp::DispImage函数显示图像。

void MainWindow::on_pushButton_clicked()
{// 读取图像文件HObject ho_Image;ReadImage(&ho_Image, "1.jpg");// 显示图像到Halcon窗口HalconCpp::DispImage(ho_Image, hv_window);
}

此时,当你点击按钮时,Halcon窗口将显示加载的图像。

6. 调整窗口尺寸以显示完整图像

当图像的分辨率大于窗口的尺寸时,图像会被部分显示。为了确保完整显示图像,我们可以根据图像的尺寸调整窗口的显示区域。

void MainWindow::on_pushButton_clicked()
{// 读取图像文件HObject ho_Image;ReadImage(&ho_Image, "1.jpg");// 获取图像尺寸HTuple hv_width, hv_height;HalconCpp::GetImageSize(ho_Image, &hv_width, &hv_height);// 设置窗口显示区域,确保完整显示图像HalconCpp::SetPart(hv_window, 0, 0, hv_height - 1, hv_width - 1);// 显示图像HalconCpp::DispImage(ho_Image, hv_window);
}

在这里,HalconCpp::SetPart的作用是设置Halcon窗口中显示图像的部分。参数(0, 0, hv_height-1, hv_width-1)表示从图像的左上角(0, 0)到右下角(hv_width-1, hv_height-1)的区域。

7. 为什么窗口的设置是(0, 0, hv_height-1, hv_width-1)

HalconCpp::SetPart函数用于调整窗口的显示区域,其参数是行列坐标。因此,图像的宽度是hv_width,高度是hv_height,但HalconCpp中的行列坐标从0开始,因此设置的窗口区域应是(0, 0, hv_height-1, hv_width-1)

8. 总结

通过将Halcon窗口绑定到Qt控件,我们可以轻松地在Qt界面中显示和操作Halcon图像。通过调整窗口的显示区域,可以确保图像完整显示,避免显示不完全的问题。

这种集成方式可以为开发者提供强大的图像处理功能,同时利用Qt的界面和交互性提升用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87578.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87578.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/87578.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(AOF篇)

在上一章我们深入学习了 Redis 中重要的数据持久化机制 ——RDB&#xff08;Redis Database&#xff09;&#xff0c;了解了其通过周期性快照将数据以二进制文件形式保存到磁盘的原理&#xff0c;包括触发条件、文件结构以及优缺点等核心内容。 Redis 持久化机制详解&#xff…

【GateWay】和权限验证

【GateWay】网关详解和权限验证 一、Gateway 核心概念与架构二、路由断言&#xff08;Route Predicates&#xff09;详解三、过滤器&#xff08;Filters&#xff09;机制四、权限认证的核心理论模型五、Spring Cloud Gateway Security OAuth2 集成方案六、OAuth2.0 集成 一、…

QSqlDatabase: QSQLITE driver not loaded

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言可能的原因解决办法1. 确认 SQLite 驱动插件文件2. 拷贝插件文件到应用程序目录3. 设置插件搜索路径4. 安装 SQLite 依赖库5. 解决 QCoreApplication 实例问题 …

20250619在荣品的PRO-RK3566开发板的Android13下解决海罗光电有限公司HL070T58C-05屏在启动的时候出现白色条纹的问题【时序】

20250619在荣品的PRO-RK3566开发板的Android13下解决海罗光电有限公司HL070T58C-05屏在启动的时候出现白色条纹的问题 2025/6/19 20:39 缘起&#xff1a;荣品的PRO-RK3566开发板的Android13下&#xff0c;点亮海罗光电有限公司HL070T58C-05屏。 在启动的时候会出现花屏/白色条纹…

docker使用Volume对Nginx进行挂载

需求&#xff1a; 需要将Nginx的欢迎页面也就是index.html文件进行修改。 原始方法&#xff1a;由于docker会为每一个容器创建其对应的文件信息&#xff0c;但是创建的信息内容只有其最基础的运行信息&#xff0c;所以想要直接去访问其index.html就无法做到。 使用volume&am…

基于springboot的宠物服务预约系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

idea 2025会在用户目录创建IdeaSnapshots文件夹

推荐一个api管理测试工具 一个简单的API测试和编写文档的工具 idea 2025会在用户目录创建IdeaSnapshots文件夹 解决方案 打开 Profiler 点击 setting 参考 https://youtrack.jetbrains.com/articles/SUPPORT-A-1086/How-to-change-or-turn-off-the-IdeaSnapshots-folder-…

【Mini-F5265-OB开发板试用测评】2、PWM驱动遥控车RX2接收解码带马达驱动控制IC

手头有带转向电机和动力电机小车底盘&#xff0c;买了很久一直在吃灰。 最近查了一下小车的驱动IC是富满微的8D420L,是一款传统的RX2接收解码芯片&#xff0c;带马达驱动。 手头没有TX2发送芯片&#xff0c;所以考虑用MCU直接发送PWM直接接入RX2&#xff0c;可能可以驱动。 一…

Tcpdump网络抓包工具详解!

一、简介 tcpdump就是&#xff1a;dump the traffic on a network&#xff0c;根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump是一个用于截取网络分组&#xff0c;并输出分组内容的工具。凭借强大的功能和灵活的截取策略&#xff0c;使其成为类UNIX系统下用…

Spring Boot的Security安全控制——应用SpringSecurity!

应用Spring Security 前面介绍了在项目开发时为什么选择Spring Security&#xff0c;还介绍了它的原理。本节开始动手实践Spring Security的相关技术。 实战&#xff1a;Spring Security入门 现在开始搭建一个新项目&#xff0c;实践一个Spring Security的入门程序。 &…

FPGA基础 -- Verilog行为级建模之alawys语句

Verilog 中的 always 语句块&#xff0c;这是行为级建模的核心结构之一&#xff0c;在 RTL 级设计中广泛用于时序逻辑和组合逻辑的建模。 一、什么是 always 语句&#xff1f; ✅ 定义&#xff1a; always 语句用于描述可综合的硬件行为逻辑&#xff0c;表示一个**“事件驱动…

【力扣 简单 C】704. 二分查找

目录 题目 解法一&#xff1a;二分查找 题目 解法一&#xff1a;二分查找 int find(const int* nums, int size, int target) {int left 0, right size - 1;while (left < right){int mid (left right) / 2;if (nums[mid] < target)left left 1;else if (nums[m…

Java并发编程实战 Day 30:并发编程未来展望与最佳实践总结

【Java并发编程实战 Day 30】并发编程未来展望与最佳实践总结 文章简述 经过30天的系统学习&#xff0c;我们从Java并发编程的基础知识逐步深入到高并发系统的架构设计与性能优化。本文作为“Java并发编程实战”系列的收官之作&#xff0c;将全面回顾整个系列的核心内容&#…

量化面试绿皮书:23. 醉酒乘客

文中内容仅限技术学习与代码实践参考&#xff0c;市场存在不确定性&#xff0c;技术分析需谨慎验证&#xff0c;不构成任何投资建议。 23. 醉酒乘客 100名乘客排队登机&#xff0c;每人持有一张对应座位的机票&#xff08;第n位乘客的座位号为n&#xff09;。 第一位乘客喝醉后…

AntV G6入门教程

以下教程聚焦于 AntV G6 的 数据操作 API,详细介绍各个方法的用途、参数以及完整的使用示例,帮助你在图实例上精细地读取、修改和管理节点/边/组合等数据。文中示例代码均基于 G6 v5.0.47 官方文档 ([g6.antv.antgroup.com][1])。 一、获取完整图数据 1.1 graph.getData() …

67、数据访问-crud实验-分页数据展示

67、数据访问-crud实验-分页数据展示 分页数据展示是数据访问中常见的功能&#xff0c;用于将大量数据分割成多个页面显示&#xff0c;提升用户体验和系统性能。以下是分页数据展示的相关介绍&#xff1a; #### 基本原理 1. **确定每页显示数量**&#xff1a;设定每页显示的数…

常见 Web 服务器

Web 服务器有很多种&#xff0c;功能和用途略有不同&#xff0c;下面我会分类介绍主流的 Web 服务器&#xff08;包含静态/动态/反向代理支持&#xff09;并重点说明类似 Tomcat 的 Java 支持型。 常见 Web 服务器分类 类型名称描述与特点&#x1f310; 静态资源服务器Nginx高…

【MacOS】M3 Pro芯片MacBook极速搭建Kubernetes

M3 Pro 芯片 MacBook 2023上使用 Colima 安装 Kubernetes。 Colima 轻量、高效&#xff0c;并且在 Apple Silicon 架构上表现出色。 下面是详细的、一步一步的安装和配置指南。 核心思路 我们将通过以下步骤完成整个过程&#xff1a; 准备工作: 安装必要的工具&#xff0c;…

import { Add, Dongdong, UserAdd } from ‘@nutui/icons-react‘ 使用图标导入库报错

import { Add } from "nutui/icons-react-taro"; 官网的导入的库名字不全&#xff0c;后面要加-taro&#xff0c;就行了

猿人学js逆向比赛第一届第七题

分析响应 看到响应体里面的data是个字体加密&#xff0c;于是这里可以看到woff文件也给返回了&#xff0c;这里现分析这个文件。 打开可以看到这里a351对应的是3和页面中的3是对应的&#xff0c;于是用ddddocr动态识别字体文件中的字体&#xff0c;然后对应对应的字体替换是不…