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

别再让Halcon拉伸你的图像了!手把手教你用dev_set_part实现完美等比例显示

Halcon图像显示优化用dev_set_part实现完美等比例适配在机器视觉项目开发中图像显示的准确性直接影响测量结果和判断效率。许多Halcon初学者都会遇到一个令人头疼的问题——当图像被加载到控件窗口时系统默认的拉伸显示方式会破坏原始比例导致圆形变椭圆、正方形变矩形。这种变形不仅影响视觉判断更可能造成测量数据的系统性误差。1. 为什么默认显示方式会破坏图像比例Halcon的默认显示行为就像把一张照片强行塞进不符合尺寸的相框。假设我们有一张500×300像素的测试图像read_image(Image, test.png) get_image_size(Image, Width, Height) // 获取到Width500, Height300当这个图像被显示在800×600的窗口时默认情况下Halcon会执行两种不受欢迎的操作非等比缩放图像被强制拉伸填满整个窗口500×300的原始比例(1.67)被扭曲为800×600(1.33)像素插值系统自动进行插值计算可能使边缘模糊化这种显示方式在以下场景会造成严重影响精密尺寸测量时1%的比例误差可能导致毫米级偏差模板匹配时变形的特征可能无法正确识别视觉检测时操作人员可能因变形图像做出错误判断2. dev_set_part的工作原理与视场概念Halcon提供的dev_set_part算子实际上是控制数字显微镜的观察范围。想象你正在通过显微镜观察样本dev_set_part(Row1, Column1, Row2, Column2)这四个参数定义了观察区域的Row1, Column1视场左上角坐标Row2, Column2视场右下角坐标通过调整这四个参数我们可以实现三种典型显示模式显示模式参数设置特点适用场景拉伸填充固定为窗口尺寸快速预览不要求精度等比居中保持图像宽高比尺寸测量、特征识别局部放大设置小于图像尺寸的范围细节检查关键计算公式 当需要等比显示时首先要计算image_ratio : Width / Height window_ratio : winWidth / winHeight然后比较这两个比值决定如何设置视场参数。这个判断逻辑是等比显示的核心算法基础。3. 实战智能适配的等比显示方案下面我们实现一个完整的智能适配方案它能自动处理各种尺寸组合* 读取图像并获取尺寸 read_image(Image, product.png) get_image_size(Image, imgWidth, imgHeight) imgRatio : imgWidth / imgHeight * 获取窗口尺寸 get_window_extents(WindowHandle, _, _, winWidth, winHeight) winRatio : winWidth / winHeight * 智能适配逻辑 if (imgRatio winRatio) * 图像比窗口更宽 dispWidth : imgWidth dispHeight : imgWidth / winRatio offset : (dispHeight - imgHeight) / 2 dev_set_part(-offset, 0, dispHeight-offset, dispWidth) else * 图像比窗口更高 dispWidth : imgHeight * winRatio dispHeight : imgHeight offset : (dispWidth - imgWidth) / 2 dev_set_part(0, -offset, dispHeight, dispWidth-offset) endif * 显示图像 dev_display(Image)这段代码处理了所有可能出现的情况图像宽高比大于窗口宽高比图像宽高比小于窗口宽高比图像尺寸大于窗口尺寸图像尺寸小于窗口尺寸4. 高级应用Qt/C#中的集成方案在实际项目中Halcon往往被集成到GUI框架中。以下是在Qt中实现等比显示的C示例void ImageWidget::displayHImage(HObject image) { try { // 获取图像尺寸 HTuple width, height; GetImageSize(image, width, height); double imgRatio width.D() / height.D(); // 获取控件尺寸 int winWidth this-width(); int winHeight this-height(); double winRatio winWidth / (double)winHeight; // 设置显示区域 if (imgRatio winRatio) { double dispHeight width.D() / winRatio; double offset (dispHeight - height.D()) / 2; SetPart(hWindowID, -offset, 0, dispHeight-offset, width.D()); } else { double dispWidth height.D() * winRatio; double offset (dispWidth - width.D()) / 2; SetPart(hWindowID, 0, -offset, height.D(), dispWidth-offset); } // 显示图像 DispObj(image, hWindowID); } catch (HException e) { qDebug() Error: e.ErrorMessage().Text(); } }常见问题解决方案黑边问题使用set_window_param(background_color,black)控制背景色或者在Qt控件背景设置匹配的颜色性能优化dev_update_window(off) // 禁止实时更新 // ...执行显示操作... dev_update_window(on) // 恢复更新多窗口同步 当需要多个视图同步显示时可以使用get_part(WindowHandle1, Row1, Col1, Row2, Col2) set_part(WindowHandle2, Row1, Col1, Row2, Col2)5. 效果验证与调试技巧为了验证我们的显示方案是否正确可以使用标准测试图像* 生成测试图案 gen_circle(Circle, 300, 300, 200) gen_rectangle1(Rect, 100, 100, 500, 500) concat_obj(Circle, Rect, TestImage)调试检查表在极端比例窗口下测试如非常宽或非常高的窗口验证图像旋转后的显示效果测试不同DPI设置下的显示一致性检查图像放大/缩小时的渲染质量性能参数对比显示方式内存占用CPU负载显示精度默认拉伸低低差等比显示中中优高质量渲染高高极佳在实际项目中我发现最容易被忽视的是多显示器环境下的适配问题。当主副显示器DPI设置不同时需要额外处理* 获取系统DPI get_system(screen_dpi, DPI) if (DPI 96) * 高DPI环境需要特殊处理 set_system(scale_gui, true) endif对于需要精确测量的应用建议在代码中加入比例验证环节* 显示后验证 get_part(WindowHandle, R1, C1, R2, C2) displayedRatio : (C2-C1)/(R2-R1) originalRatio : Width/Height if (abs(displayedRatio - originalRatio) 0.01) * 比例偏差超过1%发出警告 throw(Display ratio mismatch detected) endif掌握这些技术细节后在Qt、MFC或WinForms等环境中集成Halcon显示控件时就能确保图像始终以最真实的比例呈现为后续的图像处理和分析打下坚实基础。

相关文章:

别再让Halcon拉伸你的图像了!手把手教你用dev_set_part实现完美等比例显示

Halcon图像显示优化:用dev_set_part实现完美等比例适配 在机器视觉项目开发中,图像显示的准确性直接影响测量结果和判断效率。许多Halcon初学者都会遇到一个令人头疼的问题——当图像被加载到控件窗口时,系统默认的拉伸显示方式会破坏原始比例…...

记录复现多模态大模型论文OPERA的一周工作()旅

pagehelper整合 引入依赖 com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码 GetMapping("/list/{pageNo}") public PageInfofindAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数 PageHelper.startPage(pageNo, 10); // …...

TP4328锂电池电源管理芯片

简介 TP4328 是一款集成锂电池充电管理,LED 指示功能,升压转换器的移动电源管理芯片,外围 只需极少的元件,就可以组成功能强大的移动电源方案。 TP4328 内部集成了 0.8A 的线性充电模式,支持对 0V 电池充电&#xff1b…...

八大网盘直链下载助手终极指南:告别限速,一键获取高速下载地址

八大网盘直链下载助手终极指南:告别限速,一键获取高速下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / …...

Python 字符编码检测与语种识别(qbit)

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

ComponentSnapshot + ImagePacker 实现业务海报生成

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

Oracle B-Tree 索引结构与内部机制详解

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

告别手动编译!用Jenkins Pipeline自动化你的C/C++项目(保姆级配置流程)

告别手动编译!用Jenkins Pipeline自动化你的C/C项目(保姆级配置流程) 每次修改几行代码就要重新执行cmake .. && make,看着终端里滚动的编译日志发呆?还在为团队成员提交的代码导致构建失败而头疼?…...

JAX GPU版安装实战:从cuSPARSE报错到完美运行的完整记录

JAX GPU版深度调优指南:从cuSPARSE报错到高效计算的完整解决方案 在深度学习和高性能计算领域,JAX凭借其自动微分和XLA加速能力已成为研究人员和工程师的重要工具。然而,当我们在GPU环境中部署JAX时,经常会遇到各种库依赖和版本冲…...

MedGemma Medical Vision Lab用于模型对比研究:与LLaVA-Med、RadFM等多模态模型性能横评

MedGemma Medical Vision Lab用于模型对比研究:与LLaVA-Med、RadFM等多模态模型性能横评 1. 引言:医学多模态模型的发展现状 医学影像分析正经历着从传统算法向多模态大模型的转型。随着GPT-4V、Gemini等通用多模态模型的突破,医学领域也涌…...

Unity集成Nano-Banana生成模型:游戏开发中的动态资源创建

Unity集成Nano-Banana生成模型:游戏开发中的动态资源创建 最近,游戏开发圈里有个话题挺火的:如何让游戏内容自己“长”出来?想象一下,你的游戏世界能根据玩家的行为,实时生成独一无二的建筑、角色甚至道具…...

Qwen-Image-Edit场景解析:适合个人创作、电商美工、内容生产的AI工具

Qwen-Image-Edit场景解析:适合个人创作、电商美工、内容生产的AI工具 你有没有遇到过这样的烦恼?拍了一张不错的照片,但背景太杂乱,想换个干净的;给产品拍了主图,但总觉得不够吸引人,想加点创意…...

MedGemma 1.5效果展示:对‘慢性肾病贫血管理’的ESA使用指征→铁状态评估→给药路径推演

MedGemma 1.5效果展示:对‘慢性肾病贫血管理’的ESA使用指征→铁状态评估→给药路径推演 1. 引言:当AI遇见临床诊疗路径 想象一下,你是一位肾内科医生,面对一位慢性肾病(CKD)合并贫血的患者。你需要快速梳…...

Qwen3.5-2B保姆级教程:Gradio界面快捷键/拖拽上传/历史搜索技巧

Qwen3.5-2B保姆级教程:Gradio界面快捷键/拖拽上传/历史搜索技巧 1. 前言:认识Qwen3.5-2B Qwen3.5-2B是通义千问团队推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型主打低功耗、低门槛…...

RexUniNLU开源NLU模型实战:金融研报关系抽取+事件时间线自动生成案例

RexUniNLU开源NLU模型实战:金融研报关系抽取事件时间线自动生成案例 1. 引言:当研报分析遇上智能信息抽取 想象一下这个场景:作为一名金融分析师,你刚收到一份长达50页的行业深度研究报告。你需要从中找出所有提到的公司、它们之…...

Python 3.12 Special Attribute - 08 - __module__

Python 3.12 Special Attribute - __module____module__ 是 Python 中一个重要的内置特殊属性,它存储了定义 类、函数、方法 的模块名称(字符串)。这个属性在序列化(如 pickle)、动态导入、调试以及框架设计中扮演着…...

Geo-SAM:地理空间AI图像分割的技术实现与应用实践

Geo-SAM:地理空间AI图像分割的技术实现与应用实践 【免费下载链接】Geo-SAM A QGIS plugin tool using Segment Anything Model (SAM) to accelerate segmenting or delineating landforms in geospatial raster images. 项目地址: https://gitcode.com/gh_mirror…...

告别卡顿!在Vue项目中优化HLS/FLV播放的5个实战技巧与避坑指南

告别卡顿!在Vue项目中优化HLS/FLV播放的5个实战技巧与避坑指南 视频播放卡顿、首屏加载缓慢、内存泄漏——这些看似小问题,却能让用户体验断崖式下跌。当你的Vue项目从demo走向生产环境,面对高并发访问和复杂网络环境时,基础播放功…...

VMware Workstation Pro 25H2u1 Unlocker OEM BIOS 2.7 for Windows Linux

VMware Workstation Pro 25H2u1 Unlocker & OEM BIOS 2.7 for Windows & Linux 在 Windows 和 Linux 上运行 macOS Tahoe 请访问原文链接:https://sysin.org/blog/vmware-workstation-unlocker/ 查看最新版。原创作品,转载请保留出处。 作者主…...

PyCharm新项目避坑指南:如何为你的机器学习项目指定正确的Python3.10+CUDA12.1解释器

PyCharm新项目避坑指南:如何为你的机器学习项目指定正确的Python3.10CUDA12.1解释器 当你准备在PyCharm中启动一个新的机器学习项目时,最关键的步骤之一就是正确配置Python解释器。这不仅关系到代码能否正常运行,更直接影响GPU加速是否可用。…...

VMware Workstation Pro 25H2u1 发布 - 领先的免费桌面虚拟化软件

VMware Workstation Pro 25H2u1 for Windows & Linux - 领先的免费桌面虚拟化软件 基于 x86 的 Windows、Linux 桌面虚拟化软件 请访问原文链接:https://sysin.org/blog/vmware-workstation/ 查看最新版。原创作品,转载请保留出处。 作者主页&…...

ROS 2传感器数据融合入门:手把手教你用Python同步处理摄像头图像和激光雷达点云

ROS 2多传感器数据融合实战:基于Python的视觉-激光时空同步技术 在移动机器人感知系统开发中,摄像头和激光雷达的组合堪称经典配置——前者提供丰富的纹理和颜色信息,后者则能精确测量物体距离。但当你尝试同时使用这两种传感器时&#xff0c…...

MySQL优化全攻略:索引、SQL与分库分表的最佳实践鸵

一、各自优势和对比 这是检索出来的数据,据说是根据第三方评测与企业数据,三款产品在代码生成质量上各有侧重: 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一;Python首生成率达92.3% SQL生成准确率提升35%&…...

EMQX 在 K8s 环境部署 + 数据持久化 完整实操笔记

一、核心目标 在 K8s 集群中部署 EMQX 5.0.23,实现: Dashboard 管理员密码持久化(重启 Pod 不恢复默认); MQTT 消息持久化(保留消息重启后可读取); 生产级架构:Headless 服务(内部通信)+ NodePort 服务(外部访问)。 二、整体流程 & 问题解决(从 0 到生产) …...

开源可部署StructBERT模型:低成本GPU方案实现企业级语义匹配能力(<2GB显存)

开源可部署StructBERT模型&#xff1a;低成本GPU方案实现企业级语义匹配能力&#xff08;<2GB显存&#xff09; 1. 项目简介与核心价值 StructBERT中文句子相似度分析工具是一个基于阿里达摩院开源StructBERT大规模预训练模型开发的本地化语义匹配解决方案。这个工具专门针…...

Phi-4-mini-reasoning实操手册:WebShell日志分析技巧与常见报错解决方案

Phi-4-mini-reasoning实操手册&#xff1a;WebShell日志分析技巧与常见报错解决方案 1. 模型简介与部署验证 Phi-4-mini-reasoning是一个基于合成数据构建的轻量级开源模型&#xff0c;专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族的一员&#xff0c;它特别强化…...

MusePublic Art Studio实战案例:品牌视觉升级项目中AI辅助设计流程

MusePublic Art Studio实战案例&#xff1a;品牌视觉升级项目中AI辅助设计流程 1. 项目背景与挑战 最近我们接手了一个品牌视觉升级项目&#xff0c;客户是一家新兴的咖啡连锁品牌&#xff0c;需要全面更新品牌视觉系统。传统设计流程中&#xff0c;从概念构思到最终定稿往往…...

K8s入门到实战

一&#xff0c;简介 1&#xff0c;k8s概述 容器管理适用于集群部署&#xff0c;自动化部署 k8s利于应用扩展 k8s目标实施让容器化应用更加简洁和高效 2&#xff0c;k8s特性 自动装箱&#xff1a;基于容器对应用运行环境的资源配值要求自动部署应用 自我修复&#xff1a;当…...

某型高速可回收模块化靶标无人机总体设计方案

1. 总体设计1.1 项目概述与设计目标本方案面向新一代防空武器系统测试、训练需求的高性能靶标无人机。其核心任务是逼真模拟典型高速突防空中威胁&#xff08;如巡航导弹、战斗轰炸机等&#xff09;的飞行特性、电磁特征与机动模式&#xff0c;为防空部队提供高价值、高强度、低…...

PlugY 无限仓库:突破暗黑2单机局限的全方位增强完全指南

PlugY 无限仓库&#xff1a;突破暗黑2单机局限的全方位增强完全指南 问题导入&#xff1a;暗黑2单机玩家的三大核心痛点 暗黑破坏神2作为ARPG游戏的里程碑之作&#xff0c;其单机模式长期存在着三个难以逾越的障碍。首先是储物空间危机——原版3x10格的箱子容量在面对海量装备时…...