Halcon
文章平均质量分 69
图像处理进阶小白
这个作者很懒,什么都没留下…
展开
-
Halcon 一维码识别
一、图像预处理和条码增强对比度太低:scale_image(或使用外部程序scale_image_range),增强图像的对比度。图像模糊:emphasize锐化图像,使条码看起来更清晰。深色背景上读取浅色条码:invert_image反转图像。二、解码涉及的主要算子read_image :读图create_bar_code_model :创建条码模型find_bar_code :查找条码clear_bar_code_model :清除条码...转载 2021-05-06 11:26:33 · 1925 阅读 · 0 评论 -
halcon 开运算与闭运算
例一:毛刺在往外凸的面上策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。1 read_image (Tu, 'C:/Users/xiahui/Desktop/tu.jpg')2 binary_threshold (Tu, Region, 'max_separability', 'dark', UsedThreshold)3 opening_circle (Region, RegionOpening, 50.5)4 diffe.转载 2021-01-26 17:17:08 · 8590 阅读 · 0 评论 -
halcon连接海康威视相机
一、使用mvs自开发驱动与halcon连接1.找到mvs针对第三方连接的dll文件,根据安装版本以及电脑配置信息进行确定2.将文件复制到halcon安装路径的bin文件夹下3.使用halcon的image acquisition使用mvsion接口连接相机,生成代码进行连接二、使用默认GigEVision2接口进行连接...原创 2021-01-12 11:43:48 · 9091 阅读 · 3 评论 -
halcon-tile_images_offset
遇上一个项目,需要将多幅图片进行拼接。研究了一下halcon中的tile_images_offset算子,这个算子可以完成类似以下结构的图片拼接工作:算子签名:tile_images_offset(Images : TiledImage : OffsetRow, OffsetCol, Row1, Col1, Row2, Col2, Width, Height : )其中OffsetRow, OffsetCol用来定义拼接后的图片在整张大图中的左上角位置;Row1,Col1,Row2,Col2用来定转载 2020-12-30 18:00:32 · 934 阅读 · 0 评论 -
halcon---concat_obj 连接两个对象
concat_obj()函数原型:concat_obj(Objects1,Objects2:ObjectsConcat::)功能:连接两个对象,ObjectsConcat = [Objects1,Objects2]值得注意的是,不能将union1/union2和concat_obj混淆。union1/2是针对区域融合(merged),因此对象的个数也被改变。而concat_obj是将两个区域组合到一起参数列表:第1个参数Objects1是输入对象,即对象1第...转载 2020-12-30 16:56:19 · 9866 阅读 · 3 评论 -
gen_circle()
算子:gen_circle( : Circle : Row, Column, Radius : )作用:gen_circle生成一个或多个由中心和半径描述的圆。 gen_circle仅创建对称圆。为此,半径向内四舍入五为0.5的倍数。如果为半径指定一个整数(即1、2、3,...),则获得一个均匀的直径,因此,该圆只能相对于坐标为小数部分为0.5的中心对称。因此,在内部将中心坐标调整为小数部分为0.5的最近坐标。在此,整数坐标将四舍五入为小数部分为0.5的下一个较小值。对于奇数直径...转载 2020-12-08 18:25:01 · 3012 阅读 · 0 评论 -
fill_up和fill_up_shape
算子:fill_up(Region : RegionFillUp : : )功能:填充区域中的孔或和缝等将输入区域的孔,缝隙进行填充,形成新的完成区域。输入参数:Region输入含孔(缝隙)的区域输出参数:RegionFillUp: 输出一个布满缝隙及孔的区域算子:fill_up_shape(Region : RegionFillUp : Feature, Min, Max : )功能:fill_up_shape会填充输入区域Region中具有给定形状特征的那些孔。 参数特征确定要使用的形状特征,而最小转载 2020-12-08 18:17:09 · 1120 阅读 · 0 评论 -
connection()算子简介
1、connection(Region, ConnectedRegions)connection算子一般就两个参数,参数Region表示需要计算的输入图像区域,参数ConnectedRegions表示输出图像区域。2、connection函数简介如上图所示 ,整个椭圆里面的所有矩形,我们把所有这些矩形称之为一个region,这个时候你用Region做参数计算区域内目标的个数就是1,那么,现在我想知道这个Region实际上包含了多少个子区域sub_region,即多少个矩形,我要怎么弄?当然是转载 2020-12-08 18:12:57 · 3495 阅读 · 0 评论 -
difference与sub_image
1.difference算子检测region形状的差别,计算对象是两个region,不考虑region灰度值是否有差异;2.sub_image算子是灰度值相减,计算对象是两幅图像,主要检测图像区别,和形状没有多大关系;转载 2020-12-08 18:10:18 · 345 阅读 · 0 评论 -
shape_trans()
原型:shape_trans(Region : RegionTrans : Type : )函数作用:变换区域的形状参数Type的可选项解释如下:convex:凸包性ellipse:与输入区域有相同的矩和区域的椭圆outer_circle:最小外接圆inner_circle:最大内接圆rectangle1:平行于坐标轴的最小外接矩形rectangle2:最小外接矩形inner_rectangle1:平行于坐标轴的最大内接矩形inner_rectangle2:输入区转载 2020-12-08 18:06:16 · 1410 阅读 · 0 评论 -
dyn_threshold()使用
1. 算子结构首先看dyn_threshold 算子参数dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark )根据阈值进行图像分割处理参数分析:OrigImage:需要进行阈值分割的原始图像ThresholdImage: 通过一定图像预处理得到的阈值图像(这个预处理通常是对原图应用mean_image/gauss_image/binomial_filter 处理后的图像)Region转载 2020-12-08 18:01:25 · 847 阅读 · 0 评论 -
Halcon常用快捷键
1,ctrl+E————打开浏览例程2,ctrl+F————查找/替换3,F1—————-查看帮助4,F2—————-重置程序5,F3—————-取消程序注释6,F4—————-程序注释7,F5—————-程序运行,从第一行程序运行到最后一行8,F6—————-程序单步运行9,F7—————-单步跳入函数10,F8—————单步跳出函数...转载 2020-12-08 17:23:33 · 1665 阅读 · 0 评论 -
select_shape_std()
作用:select_shape_std(Regions : SelectedRegions : Shape, Percent : )函数根据Shape指定的形状特征,从Regions 选择满足特征的区域,保存到SelectedRegions 。Shape有以下取值 max_area 面积最大区域被选择 rectangle1 通过smallest_rectangle1计算区域的最小外接平行矩形, 如果计算出的区域与原区域面积百分比大于Percent ,则此区域选中输出。 rectang...转载 2020-12-08 17:21:30 · 4937 阅读 · 0 评论 -
mean_image()平滑图像
算子:mean_image(Image : ImageMean : MaskWidth, MaskHeight : )功能:通过均值平滑一个图像。算子mean_image使用所有输入图像(Image)的灰度值执行线性平滑。输入参数:Image:输入图像(byte’/ int2’/ uint2’/ int4’/ int8 /real’/ vector_field);MaskWidth:输入平滑蒙板宽度,默认 9’参考 3, 5, 7, 9, 11, 15, 23, 31, 43, ...转载 2020-12-08 16:54:59 · 2895 阅读 · 0 评论 -
halcon读取图像
读取图像 :read_image打开图像窗口:dev_open_window获取图像尺寸:get_image_size显示图像:dev_display设置窗口句柄:dev_set_window合适的窗口:dev_open_window_fit_image(dev_open_window_fite_size)read_image (Image, '1')*打开图像窗口dev_open_window (0, 0, 512, 512, 'black', WindowH.转载 2020-11-26 21:14:46 · 1333 阅读 · 0 评论 -
gen_empty_obj算子的作用
gen_empty_obj算子解释:Create an empty object tuple。其算子签名为:gen_empty_obj( : EmptyObject : : )那么有人要问:创建一个空的object有什么用呢?其实gen_empty_obj 的作用类似于面向对象编程中的“类的实例化”,可以防止“空引用异常”。语句gen_empty_obj( EmptyObject )的意思是:EmptyObject 是真实存在的一个object(因为它被创建出来了),只是...转载 2020-11-22 18:54:57 · 3382 阅读 · 0 评论 -
Halcon中 reduce_domain算子和crop_domain算子的使用及配合
1 reduce_domain算子reduce_domain ( Image, Region : ImageReduced : : ) 其中,Image是输入的图像;Region是输入的区域;ImageReduced是输出的图像,是Image中Region的那部分图像。1 2 通过reduce_domain确实能获得特定区域Region位置的图像,但是,reduce_domain是缩小一个图像的定义域,并不缩小图像的实际尺寸,即新图像ImageReduced尺寸大小并未发生变化。如果使用g转载 2020-10-16 09:23:15 · 3414 阅读 · 0 评论 -
OCR字符识别--文字切割算法-投影切割优化
前言在上文(文字切割算法-基于投影的切割)中发现切割结果并不是很理想,所以在本文提出优化算法对结果进行进一步处理。本算法的解决思路很简单,即针对已暴露出的问题进行解决,对于未暴露的问题就无能为力了。所以算法的鲁棒性并不是很好,但是简单易实现。发现问题 对基于投影的切割结果进行观察,可以将问题总结为三类。整体连接 多个文字连接在一起左右结构分开 左右结构的文字被切割成两个字左右结构分开后连接...转载 2020-08-31 16:26:18 · 1113 阅读 · 0 评论 -
OCR字符识别--文字切割算法之投影切割
前言: 文字识别的关键之所在就是单个文字的切割,切割的准确度极大的影响了文字识别的正确率。本文基于传统横纵投影的思想对文字进行切割,使用java与python实现了本算法。基本思路:1、横向扫描,切出每一行 2、对每一行进行纵向扫描,得出每一个字经过对原始图像的相关处理,得出如下二值图(仅有黑白色)。这里的‘相关处理’是很复杂的,涉及图像学相关知识,我是通过opencv进行处理的。本文主要对切割算法进行讨论,图片处理部分望读者...转载 2020-08-31 16:21:22 · 2879 阅读 · 1 评论 -
OCR字符识别
首先介绍一个名词OCR(Optical Character Recognition,光学字符识别)。是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。OCR的应用领域:文字识别OCR通常应用在证件识别(身份证,驾驶证,护照,名片)、文档检索、截图识别(猿题库,作业帮)OCR对图片都做了什么:实际上我们预期的结果是把只有包含单个文字的图片交给计算机去翻译。机器是怎么看到纸质或者电子文档或是图片上的文字的呢?转载 2020-08-31 14:51:57 · 1278 阅读 · 0 评论 -
Halcon与C#二次开发
1、Halcon二次开发的两种方式① 使用C#的语法方式逐句改写Halcon代码优点:各种变量的类型清楚,可读性强,改写后代码行数几乎不会增加多少。缺点:改写工作量大,容易出错,如果Halcon代码量大,后期将难以更新维护。② 封装成函数导出 (推荐)优点:操作简单,对开发人员编程能力要求低,工作量少,且便于维护。缺点:Halcon函数导出的代码可读性极低,一旦丢失原Halcon文件,二次开发程序将难以更新维护。建议:主二副一。2、Halcon联合C#开发必备的设置步骤(Ha转载 2020-08-31 13:48:05 · 934 阅读 · 0 评论 -
卷帘曝光与全局曝光的区别
全局曝光和卷帘曝光是常见的相机曝光方式。一般来说,CCD相机是全局曝光,而CMOS相机则存在卷帘曝光。那么,这两种方式孰优孰劣呢?或者说,他们两者的差别在哪里呢?那么,先从两者的定义说起。全局曝光 全局曝光的方式比较简单。也就是说光圈打开后,整个图像芯片同时曝光。因此,曝光时间与机械的开关速度有关。既然与机械运动相关,所以,存在理论上的最小曝光时间。卷帘曝光 顾名思义,卷帘曝光的方式可能与卷帘的概念相关。此种曝光方式是当光圈打开后,还存在具有一定间隔的卷帘来控制传感器的曝光时间。注意,如转载 2020-08-31 10:44:50 · 4607 阅读 · 0 评论 -
工业相机镜头参数
一、 镜头主要参数 1.焦距(FocalLength) 焦距是从镜头的中心点到胶平面上所形成的清晰影像之间的距离(注意!,相机的焦距与单片凸透镜的焦距是两个概念,因为相机上安装的镜头是多片薄的凸透镜组成,单片凸透镜的焦距是平行光线汇聚到一点,这点到凸透镜中心的距离)。焦距的大小决定着视角的大小,焦距数值小,视角大,所观察的范围也大;焦距数值大,视角小,观察范围小。根据焦距能否调节,可分为定焦镜头和变焦镜头两大类。 2.光圈(Iris) 用F表示,以镜头焦距f和通光孔径D的比值来衡量。转载 2020-08-31 09:48:28 · 3044 阅读 · 1 评论 -
线阵相机与面阵相机的区别
线阵相机 主要应用于工业、医疗、科研与安全领域的图象处理。在机器视觉领域中,线阵相机是一类特殊的视觉机器。与面阵相机相比,它的传感器只有一行感光元素,因此使高扫描频率和高分辨率成为可能。线阵相机的典型应用领域是检测连续的材料,例如金属、塑料、纸和纤维等。被检测的物体通常匀速运动,利用一台或多台相机对其逐行连续扫描,以达到对其整个表面均匀检测。可以对其图象一行一行进行处理,或者对由多行组成的面阵图象进行处理。另外线阵相机非常适合测量场合,这要归功于传感器的高分辨率,它可以准确测量到微米...转载 2020-08-31 09:36:41 · 2818 阅读 · 0 评论 -
basler相机详细使用说明
首先安装basler相机的驱动,应用程序包如下所示:选择开发应用者和USB接口方式。最后安装成功后会在桌面上显示,如下所示:主要使用下面那个pylon viewer软件,点击该应用出现以下界面双击此处,调整图像采集参数设置:主要对该部分进行设置:关闭自动增益设置图像大小曝光时间设置,关闭自动曝光。(曝光时间单位为us)设置好参数,打开相机:点击连续采集选项,采集图像,操作界面如下所示:打开光圈,调整焦距,以及成像物距以便获取清晰..转载 2020-08-31 09:16:36 · 17620 阅读 · 5 评论 -
阈值分割 实验法、直方图谷底确定阈值法
1.实验法实验法是通过人眼观察,对已知某些特征的图像试验不同的阈值,观察是否满足要求。缺点:适用范围窄,使用前必须知道图像的某些特征,如平均灰度等,而且分割后图像的质量好坏受主观局限性的影响很大。主要代码:threshold(image,Region,179,255)image是要检测的图像,region是分割后的区域,197,255表示选择的灰度值范围(没有经过计算,试验得出)2.直方图谷底确定阈值法前提条件:图像的前景物体内部和背景区域的灰度值分布比较均匀,那么这个图像的灰度直方原创 2020-08-28 11:05:32 · 4986 阅读 · 0 评论 -
图像分割之阈值分割
阈值分割是一种按照图像像素灰度幅度进行分割的方法,它是把图像的灰度分成不同的等级,然后用设置灰度门限(阈值)的方法确定有意义的区域或要分割物体的边界。阈值分割的一个难点是:1.在图像分割之前,无法确定图像分割生成的区域的数目;2. 阈值的确定,因为阈值的确定直接影响分割的精度及分割后的图像进行描述分析的正确性。对于只有背景和目标两类对象的灰度图像来说,阈值选取过高,容易把大量的目标误判为背景;阈值选取过低,又容易把大量背景误判为目标。一般来说,阈值分割可以分成一下三步,1. 确定阈值; 2. 将原创 2020-08-27 18:21:35 · 5708 阅读 · 0 评论