python调用halcon程序/.hdev文件/直接调用halcon引擎

news2024/9/22 20:27:49

一、前言

python有两种调用halcon的方法

1、安装halcon的python库,pip install mvtec-halcon==20111

然后python代码中主要调用方式为:通过ha来调用halcon中的各种算子,本人不是很喜欢这种方式,后面主要介绍第2种方法。

import halcon as ha

if __name__ == '__main__':
    img = ha.read_image('pcb')

    region = ha.threshold(img, 0, 122)
    num_regions = ha.count_obj(ha.connection(region))

    print(f'Number of Regions: {num_regions}')

2、python是可以直接调用halcon的.hdev程序的。

开始的时候从网上找了很多代码,不过都写的很复杂,而且加入了很多python的库,各种python的库的安装也比较头痛,后来发现halcon提供了参考代码,在下图的位置

 

 

 本人也写了一个简单的例子供大家参考,简单说一下步骤

步骤1:安装halcon的库,主要用于向halcon程序输入参数用,通过pip安装即可:pip install mvtec-halcon==20111

步骤2:写halcon程序,需要将halcon的程序封装到一个方法里面,方便调用,和C#引擎直接halcon程序的方法类似。

步骤3:写python代码,输入和接收halcon的参数

halcon程序,halcon程序的名称为:test_halcon.hdev,后面的python程序会用到

dev_update_window ('off')
*合格
*read_image (Image, 'D:/2022/1218test/数据/测试/1218侧面1007895p0')
*不合格
*read_image (Image, 'D:/2022/1218test/数据/测试/1218侧面100789p1')
*read_image (Image, 'D:/2022/1218test/数据/测试/1218侧面100789p2')
read_image (Image, 'D:/2022/1218test/数据/测试/1218侧面1007859p3')

dev_close_window ()

get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width/2, Height/2, WindowHandle)
set_display_font (WindowHandle, 18, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (1)
dev_display(Image)

*合格位置
jiance_wangge (Image, ErrorRegions2, NumErrors)

if (NumErrors > 0)
    disp_message (WindowHandle, 'Mesh not OK', 'window', 24, 12, 'red', 'true')
else
    disp_message (WindowHandle, 'Mesh OK', 'window', 24, 12, 'black', 'true')
endif

jiance_wangge封装的算子

jiance_wangge代码

gen_rectangle1 (ROI_0, 476.5, 624.5, 596.5, 1048.5)
*gen_rectangle1 (ROI_0, 696.5, 636.5, 844.5, 1044.5)

reduce_domain (Image, ROI_0, ImageReduced)
*read_image (Image, 'plastic_mesh/plastic_mesh_')
mean_image (ImageReduced, ImageMean, 49, 49)
*dyn_threshold (ImageReduced, ImageMean, RegionDynThresh, 15, 'dark')
dyn_threshold (ImageReduced, ImageMean, RegionDynThresh, 15, 'light')
connection (RegionDynThresh, ConnectedRegions)
select_shape (ConnectedRegions, ErrorRegions2, 'area', 'and', 200, 99999)
count_obj (ErrorRegions2, NumErrors)
dev_display (Image)
dev_set_color ('red')


return ()

 python调用halcon程序代码

import os
import halcon as ha
import halcon_IO as hal_IO
# from matplotlib import pyplot as plt
if __name__ == "__main__":
    #hdev_example_dir = hal_IO.setup_hdev_engine()
    #program = ha.HDevProgram(
    #    os.path.join(hdev_example_dir, 'hdevelop', 'wangge_halcon.hdev')
    #)
    program = ha.HDevProgram('test_halcon.hdev')
    proc = ha.HDevProcedure.load_local(program, 'jiance_wangge')
    proc_call = ha.HDevProcedureCall(proc)
    #acq_handle = hal_IO.init_acq_handle(program)
    for _ in range(3):
        #acq_img = ha.grab_image(acq_handle)
        acq_img=ha.read_image('D:/2022/1218test/数据/测试/1218侧面100789p3')
        width, height = ha.get_image_size_s(acq_img)
        window = hal_IO.open_window(width/2, height/2, row=100, col=100)
        ha.disp_obj(acq_img, window)
        #传入图像参数Image
        proc_call.set_input_iconic_param_by_name('Image', acq_img)
        proc_call.execute()
        #将halcon的输出参数传回来
        fin_region = proc_call.get_output_iconic_param_by_name('ErrorRegions2')
        fin_area = proc_call.get_output_control_param_by_name('NumErrors')
        hal_IO.display_fin(window, fin_region, fin_area)
        input('Press Enter to continue...')
        zoom_window = hal_IO.zoom_in_on_fin(acq_img, fin_region)
        input('Press Enter to continue...')

上面的程序段用到了halcon_IO,主要是用于打开显示窗口,用于显示图像和region等数据

import os
import halcon as ha

def open_window(width, height, row, col):
    """打开窗口"""
    if os.name == 'nt':
        ha.set_system('use_window_thread', 'true')

    return ha.open_window(
        row=row,
        column=col,
        width=width,
        height=height,
        father_window=0,
        mode='visible',
        machine=''
    )


def setup_hdev_engine():
    """获取引擎"""
    example_dir = ha.get_system_s('example_dir')
    hdev_example_dir = os.path.join(example_dir, 'hdevengine')

    engine = ha.HDevEngine()
    engine.set_procedure_path(os.path.join(hdev_example_dir, 'procedures'))

    return hdev_example_dir


def init_acq_handle(program):
    """采集图像"""
    proc = ha.HDevProcedure.load_local(program, 'init_acquisition')
    proc_call = ha.HDevProcedureCall(proc)
    proc_call.execute()
    return proc_call.get_output_control_param_by_name('AcqHandle')


def display_fin(window, fin_region, fin_area):
    """显示信息"""
    ha.set_color(window, 'red')
    ha.set_draw(window, 'margin')
    ha.disp_obj(fin_region, window)

    ha.set_color(window, 'red')
    ha.set_tposition(window, 20, 20)
    ha.write_string(window, f'缺陷数量: {fin_area[0]}')


def zoom_in_on_fin(img, fin_region):
    """显示放大的region在新的窗口"""
    zoom_scale = 2
    margin = 5

    _, center_row, center_col = ha.area_center_s(fin_region)
    row1, col1, row2, col2 = ha.smallest_rectangle1_s(fin_region)

    region_height = row2 - row1
    region_width = col2 - col1

    zoom_window = open_window(
        width=(region_width + (2 * margin)) * zoom_scale,
        height=(region_height + (2 * margin)) * zoom_scale,
        row=100 + (center_row / 2),
        col=100 + ((center_col / 2) + 30)
    )
    ha.set_part(
        zoom_window,
        row1 - margin,
        col1 - margin,
        row2 - margin,
        col2 - margin
    )
    ha.disp_obj(img, zoom_window)
    ha.set_color(zoom_window, 'red')
    ha.disp_obj(fin_region, zoom_window)

    return zoom_window

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java计算机毕业设计springboot+vue校园出入管理系统

项目介绍 本论文主要论述了如何使用JAVA语言开发一个校园出入管理系统 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述校园出入管理系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系…

可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?

指针vs指针变量一、指针和指针变量的含义1、变量的“左值”和“右值”2、什么是指针?3、什么是指针变量?二、如何看待“指针就是指针变量”这种说法三、为什么要存在指针?四、对指针进行解引用操作的本质一、指针和指针变量的含义 1、变量的…

2022云南省职业院校技能大赛(高职组) Web技术(网站设计与开发)赛项规程

2022云南省职业院校技能大赛(高职组) Web技术(网站设计与开发)赛项规程 一、赛项名称 赛项名称:Web技术(网站设计与开发) 赛项组别:高职组 二、竞赛内容 Web技术(网站设计…

SA-UNet:用于视网膜血管分割的空间注意力UNet

摘要 在本文中提出了一种名为空间注意力UNet(SA-UNet)的轻量级网络,它不需要大量的带注释的训练样本,可以以数据增强的方式来更有效的使用可用的带注释的样本。SA-UNet引入一种空间注意模块,这个模块沿着空间维度推断…

[激光原理与应用-61]:激光器 - 种子源 - 1064nm皮秒种子源参数解读

目录 第1章 种子源介绍 1.1 简介 1.2 种子源特点 1.3 皮秒种子源应用 第2章 《瀚盈激光》种子源性能指标解读 2.1 波长:1064nm 》红外 2.2 光谱宽度(频率宽度、带宽) 2.3 线宽 2.4 脉冲宽度 2.5 重复频率 周期T 2.6 输出功率 2.…

【世界杯黑技术专题】「原理探索专题」一文解读一下“卡塔尔世界杯”的先进技术之半自动越位技术SAOT+比赛用球Al Rihla

2022年卡塔尔世界杯即将谢幕 纵观2022年的卡塔尔世界杯的赛程,还是很多波澜的,很多强队都被草草的淘汰掉,特别是我之前较为看好的德国队、西班牙、葡萄牙等队伍草草的出局。让我的心不禁的一紧,到底花落谁家呢?我后面…

渲染组的使用

渲染组件目录概述需求:设计思路实现思路分析参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive. happy for har…

Python OS库详解(一)——OS库简介与路径操作

今天继续给大家介绍Python相关知识,本文主要内容是Python OS库详解(一)——OS库简介与路径操作。 一、Python OS库简介 Python os库是Python的标准库,提供通用的Python程序和操作系统交互的功能函数。os库包含几百个Python函数&…

《数据结构、算法与应用C++语言描述》线性表-链表描述

_11 《数据结构、算法与应用C语言描述》线性表-链表描述 11表示第11篇博文,6表示在 数据结构算法与应用C语言描述 书中所在章节。 本文包含了《数据结构、算法与应用C语言描述》第六章主要练习题答案,给出了线性表链表描述完整测试代码。 6.1 线性表数…

【C语言】编译链接 _Linux下操作 _#define详解 [进阶篇 _复习总结]

1.翻译环境和执行环境 1.1翻译环境 翻译环境又可以分为编译和链接,形成的可执行程序test.exe通过执行环境显示运行结果。 把源代码转换为可执行的机器指令(二进制指令),由编译器完成。 每个源文件经过编译器生成目标文件(windows下命名为xxx.obj&…

【C++初阶】string类各部分的使用介绍

文章目录1.为什么学string类?2. 标准库中的string类string类的介绍string类常用的接口说明a.常见的构造b.string类对象的常用容量操作c.string类对象的访问及遍历操作d.string类对象的修改操作1.为什么学string类? C语言中,字符串是以’\0’…

计算机毕设Python+Vue休闲网络宾馆管理(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【图像分割】基于matlab Kmean聚类分水岭、oust、粒子群算法优化脂肪肝图像分割【含Matlab源码 2277期】

⛄一、粒子群算法自适应多阈值图像分割简介 FCM聚类算法是一种局部搜索算法,对初始值较为敏感,容易陷入局部极小值而不能得到全局最优解。PSO算法是一种基于群体的具有全局寻优能力的优化方法。本文将FCM聚类算法和PSO算法结合起来,将FCM聚类算法的聚类准则函数作为PSO算法中的…

MySQL简介与安装

文章目录MySQL简介与安装一、数据库相关概念二、MySQL数据库1. 版本2. 下载3. 安装1). 双击官方下载的安装包文件2). 根据安装提示进行安装3). 配置MySQL环境4. 启动停止5. 客户端连接6. 数据模型MySQL简介与安装 本文主要介绍数据库的相关概念、以及在Windows下安装MySQL 8.0…

matplotlib绘图详解

文章目录matplotlib绘图详解一、 基础准备1、 matplotlib简介2、 环境准备2.1 安装2.2 参考文档3、 图表结构4、 常用图表二、绘图步骤1、 常用图表1.1 散点图1.2 柱状图1.3 饼图1.4 折线图2、 多图绘制2.1 subplot2.2 subplots3、 绘图配置3.1常用配置3.1.1 网格线3.1.2 标题和…

【问答篇】Java 基础篇 面试题(二)

每天进步一点~ 01、问:PreparedStatement与Statement的区别? 答: PreparedStatement是预编译语句执行者,数据库对sql语句进行预编译;Statement是执行时对sql语句进行编译 Statement存在sql注入的问题,Prep…

非零基础自学Golang 第10章 错误处理 10.3 Go语言宕机 10.4 宕机恢复

非零基础自学Golang 文章目录非零基础自学Golang第10章 错误处理10.3 Go语言宕机10.4 宕机恢复10.4.1 recover捕获宕机10.4.2 recover应用第10章 错误处理 10.3 Go语言宕机 一般而言,只有当程序发生不可逆的错误时,才会使用panic方法来触发宕机。 pan…

云计算运营—02FusionSphere 6.5 服务器虚拟化运营

FusionSphere 6.5 服务器虚拟化运营 1、虚拟化 特性介绍 云操作系统架构 Tool/PV driver(虚拟机驱动) Tools是虚拟机的驱动程序。 安装并启动Tools后,用户无需做任何操作,Tools即可提供以下功能: 1、为虚拟机提供高性能的磁盘I/0和网络I/0功能 2、为…

Element-plus的通用使用方法

Element-plus的通用使用方法说明一、组件属性的使用二、组件内部事件的使用三、组件插槽的使用四、组件外部方法的使用1、使用外部方法是要调用标签的$refs2.使用方法完说明 本教程适用于Element-plus的使用非常熟练本教程是对Element-plus的高度总结组件属性的使用组件插槽的…

中国自然地理分区数据集 (含农业区划、森林工程、生态保护区、九大流域等)

一中国生态功能保护区数据 代码 名称 类型 1 秦岭山地生态功能保护区 水涵养生态功能保护区 2 若尔盖一玛曲生态功能保护区 水涵养生态功能保护区 3 滇西北生态功能保护区 水涵养生态功能保护区 4 珠江源(云南部分)生态功能保护区 水涵养生态功能保护区 5 雅鲁藏布江源头生态…