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

Qt 与Halcon联合开发九:算法类设计与实现讲解(附源码)

一、设计背景

在机器视觉系统中,算法是系统的核心。不同产品、不同项目对图像处理的要求不尽相同,因此算法需要具备:

  • 灵活拓展:方便添加新算法
  • 统一调用:界面或上层逻辑不关心算法细节
  • 结构清晰:便于维护与团队协作
  • 可视化调试:与 Halcon 窗口联动,便于结果展示

为此,我们设计了一个基于 Qt 和 Halcon 的算法类架构,采用 C++ 面向对象思想,抽象出一个通用算法基类,再由各类检测算法子类继承,实现统一接口和结构。

工程代码

通过网盘分享的文件:Qt 与Halcon联合开发九:算法类设计与实现讲解
链接: https://pan.baidu.com/s/1Bwx51nXuUepDqGz2DTyHeQ?pwd=jkcf 提取码: jkcf

二、总体架构设计

✅ 设计核心:

  • 抽象出一个算法基类 HalconAlgorithmBase

    • 管理通用资源(参数、窗口)
    • 定义统一接口 Run(HObject)
  • 各类检测算法作为子类继承:

    • 实现具体检测逻辑(如边缘检测、定位检测、字符识别等)

📦 类图结构如下:

HalconAlgorithmBase(抽象类)↑┌───────────────┐│               │
ConcreteAlgorithm1(子类1)
ConcreteAlgorithm2(子类2)
……

三、算法基类 HalconAlgorithmBase

3.1 职责说明

HalconAlgorithmBase 是一个抽象类,定义了算法运行框架,主要功能:

功能项描述
参数管理使用 std::map 存储算法运行所需的可配置参数
窗口绑定存储 Halcon 显示窗口,统一显示结果
核心接口提供纯虚函数 Run(const HObject& input) 供子类实现

3.2 接口定义(.h)

#pragma once
#include "HalconCpp.h"
#include <string>
#include <map>class HalconAlgorithmBase {
public:using ParamMap = std::map<std::string, std::string>;HalconAlgorithmBase();virtual ~HalconAlgorithmBase();void SetParams(const ParamMap& params);               // 设置参数const ParamMap& GetParams() const;                    // 获取参数void SetWindow(const HalconCpp::HTuple& window);      // 设置显示窗口const HalconCpp::HTuple& GetWindow() const;           // 获取窗口virtual void Run(const HalconCpp::HObject& inputImage) = 0; // 核心算法入口(子类实现)protected:ParamMap parameters_;HalconCpp::HTuple windowHandle_;
};

3.3 实现逻辑(.cpp)

#include "HalconAlgorithmBase.h"HalconAlgorithmBase::HalconAlgorithmBase() {}HalconAlgorithmBase::~HalconAlgorithmBase() {}void HalconAlgorithmBase::SetParams(const ParamMap& params) {parameters_ = params;
}const HalconAlgorithmBase::ParamMap& HalconAlgorithmBase::GetParams() const {return parameters_;
}void HalconAlgorithmBase::SetWindow(const HalconCpp::HTuple& window) {windowHandle_ = window;
}const HalconCpp::HTuple& HalconAlgorithmBase::GetWindow() const {return windowHandle_;
}

四、子类结构说明(检测类)

🎯 设计原则

每个检测子类都继承自 HalconAlgorithmBase只需实现具体的检测函数。不关心窗口、参数机制,这些都由基类统一管理。

示例(说明性代码)

#pragma once
#include "HalconAlgorithmBase.h"// 示例子类:用于任意具体检测任务
class ExampleDetectionAlgorithm : public HalconAlgorithmBase {
public:void Run(const HalconCpp::HObject& inputImage) override;
};
#include "ExampleDetectionAlgorithm.h"
#include "HalconCpp.h"using namespace HalconCpp;void ExampleDetectionAlgorithm::Run(const HObject& inputImage) {// 这里只是示例检测流程(可替换为任何实际检测逻辑)std::cout << "----- Algorithm Parameters -----" << std::endl;for (const auto& [key, value] : parameters_) {std::cout << key << " = " << value << std::endl;}std::cout << "--------------------------------" << std::endl;HalconCpp::HTuple hv_width,hv_height;HalconCpp::GetImageSize(inputImage,&hv_width,&hv_height);qDebug()<<hv_width.ToString().Text()<<hv_height.ToString().Text();}


五、与 Qt 的结合方式

### 📌 设置算法参数并运行```cpp
#include "exampledetectionalgorithm.h"
#include "HalconCpp.h"using namespace HalconCpp;int main() {HObject image;ReadImage(&image, "1.bmp");auto algorithm = new ExampleDetectionAlgorithm();HalconAlgorithmBase::ParamMap params;params["threshold"] = "128";  // 示例参数algorithm->SetParams(params);algorithm->Run(image);  // image 为 Halcon 的 HObject 输入图像return 0;
}

六、设计优点总结

特性优势说明
🎯 高复用性同一套界面可调用多个算法
🧩 解耦清晰算法逻辑与界面、参数解耦
📦 易于维护新算法实现不影响其他代码
🔍 调试方便可在 Halcon 窗口显示中间过程
🚀 快速迭代支持参数动态配置、热更新

http://www.dtcms.com/a/269714.html

相关文章:

  • AlphaEvolve:谷歌的算法进化引擎 | 从数学证明到芯片设计的AI自主发现新纪元
  • 告别“电量焦虑”,BLE如何提升可穿戴设备续航能力?
  • Flutter基础(前端教程④-组件拼接)
  • Linux NUMA调优实战:多线程程序加速方法
  • 电路研究9.3.10——合宙Air780EP中的AT开发指南:阿里云应用指南
  • Deepoc大模型:重构无人机认知边界的具身智能革命
  • 华为泰山服务器重启后出现 XFS 文件系统磁盘“不识别”(无法挂载或访问),但挂载点目录仍在且无数据
  • WPA2 与 WPA3:深入解析Wi-Fi安全协议
  • Linux网络:UDP socket创建流程与简单通信
  • 手机能用酒精擦吗?
  • 前端学习3--position定位(relative+absolute+sticky)
  • Android kotlin 协程的详细使用指南
  • SpringBoot校园外卖服务系统设计与实现源码
  • EXCEL链接模板无法自动链接到PowerBI?试试这个方法
  • 自动驾驶的“安全基石”:NVIDIA如何用技术守护未来出行
  • 最新 HarmonyOS API 20 知识库 重磅推出
  • 【计算机网络】王道考研笔记整理(1)计算机网络体系结构
  • 嘉立创黄山派下载watch ui demo 教程(sf32)
  • Modbus TCP转Profinet网关实现视觉相机与西门子PLC配置实例研究
  • OpenCV 图像哈希类cv::img_hash::AverageHash
  • ​扣子Coze飞书多维表插件通用参数和通用返回值
  • Mysql常用内置函数,复合查询及内外连接
  • 利用外部Postgresql及zookeeper,启动Apache Dolphinscheduler3.1.9
  • 小程序订阅消息设计:用户触达与隐私保护的平衡法则
  • STM32-定时器
  • 冷链物流配送中心选址与路径优化模型研究
  • SpringBoot基础特性:自定义Banner与Swagger文档
  • houdini云渲染和云解算新选择
  • 易境通海运系统:赋能海运企业全链路数字化运营!
  • 【Note】《Kafka: The Definitive Guide》第11章:Stream Processing