halcon入门之_提取遥控器字符并且写入txt文本

程序中使用的照片如上

*老生常谈
read_image (Image, a)
rgb1_to_gray (Image, GrayImage)
dev_display (GrayImage)
* 首先要把它转化为灰度图,在机器视觉中,大部分的图像处理算子都是建立在灰度图上的,所以gray(灰度图)是标志性存在的

*转化为灰度图后,就要进入正式的图像处理了,先来一波阈值分割

auto_threshold (GrayImage, Regions, 24.4)
*auto_threshold 算子是基于直方图的自动阈值分割方法,第三个参数的作用是一个平滑算子,在这次的使用中,效果不是很好,分析原因主要是对比不够强烈,算子使用前后没有明显区分
threshold (GrayImage, Region, 170, 255)
*threshold 是手动设置阈值的算子,在halcon中查看阈值可以在鼠标移至照片上,按下Ctrl键,便会实时显示当前灰度值
*binary_threshold (GrayImage, Region, 'smooth_histo', 'light', UsedThreshold)
*binary_threshold 在这里的使用中,遥控器左下角有些许噪声会干扰
*阈值分割后,常见的做法就是连通区域
connection (Region, ConnectedRegions)
*然后在这里,明显的可以通过面积特征来筛选就可以
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 1.22555e+06)
dev_clear_window ()
dev_display (SelectedRegions)

*在select_shape_std 算子中,面积大小可以通过halcon的"打开特征检测"菜单来查看

*提取之后填充
fill_up (SelectedRegions, RegionFillUp)
*截取带有字符的区域,如果上边不填充,这里直接截取区域的话,会漏掉字符部分
reduce_domain (GrayImage, RegionFillUp, ImageReduced)
*区域截取之后,再通过阈值分割来找到字符
fast_threshold (ImageReduced, Region1, 0, 100, 20)
*先把字符区域放平整,分割出去','
orientation_region (Region1, Phi)
*转换成正常角度,把逗号分割出去
area_center (Region1, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, -0.5*3.14, HomMat2D)
affine_trans_region (Region1, RegionAffineTrans, HomMat2D, 'nearest_neighbor')

*去除','区域,在这里考虑使用面积筛选
*腐蚀-膨胀-连通处理*筛选
closing_circle (RegionAffineTrans, RegionClosing, 3.5)
dilation_rectangle1 (RegionClosing, RegionDilation, 1, 11)
connection (RegionDilation, ConnectedRegions1)
******这里的两个筛选还是有区别的,注意区分
select_shape_std (ConnectedRegions1, SelectedRegions1, 'max_area', 150)
select_shape (ConnectedRegions1, SelectedRegions2, 'area', 'and', 150, 99999)
****把未去除逗号区域旋转
affine_trans_region (Region1, RegionAffineTrans1, HomMat2D, 'nearest_neighbor')
*求交集
intersection (SelectedRegions2, RegionAffineTrans1, RegionIntersection)

sort_region (RegionIntersection, SortedRegions, 'first_point', 'true', 'row')
*有字符连接在一起的情况,要分割开来
*首先寻找特征,根据面积呢,是不合适了,在这里,我们选择通过矩形边长来吧

select_shape (SortedRegions, SelectedRegions3, 'rect2_len1', 'and', 30, 99999)
*膨胀
closing_circle (SelectedRegions3, RegionClosing1, 0.5)
dilation_rectangle1 (RegionClosing1, RegionDilation1, 1, 11)
connection (RegionDilation1, ConnectedRegions2)

*单个字符分割后,再求交集
intersection (ConnectedRegions2, SelectedRegions3, RegionIntersection1)


*得到一个空区域
gen_empty_obj (EmptyObject)
concat_obj (EmptyObject, RegionIntersection1, EmptyObject)

difference (RegionIntersection, RegionIntersection1, RegionDifference)


concat_obj (RegionDifference, EmptyObject, ObjectsConcat)

count_obj (ObjectsConcat, Number)

a:=[]
l1:=[]
l2:=[]
for i := 1 to Number by 1
    select_obj (ObjectsConcat, ObjectSelected, i)
    area_center (ObjectSelected, Area1, Row1, Column1)
    a:=[a,Area1,'\t']
    smallest_rectangle2 (ObjectSelected, Row2, Column2, Phi1, Length1, Length2)
    l1:=[l1,Length1,'\t']
    l2:=[l2,Length2,'\t']
endfor


*新建txt
open_file ('0711.txt', 'output', FileHandle)

fwrite_string (FileHandle, a)
fnew_line (FileHandle)

fwrite_string (FileHandle, l1)
fnew_line (FileHandle)

fwrite_string (FileHandle, l2)
fnew_line (FileHandle)



#s/

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Halcon是一款图像处理软件,可以用于图像识别、字符识别、物体检测等多种领域。基于Halcon字符识别可以通过以下步骤实现: 1. 装载图像:使用Halcon的read_image函数读取图像。 2. 预处理图像:使用Halcon的preprocessing函数对图像进行预处理,例如灰度化、二值化等。 3. 定位字符:使用Halcon的find_text函数对字符进行定位。 4. 分割字符:根据字符的位置信息,使用Halcon的crop_rectangle函数将字符从原图像中分割出来。 5. 特征提取:对分割出来的字符进行特征提取,例如使用Halcon的moments函数计算Hu不变矩。 6. 训练分类器:使用Halcon的svm_train函数训练分类器。 7. 字符识别:使用Halcon的svm_classify函数对新的字符进行识别。 下面是一个基于Halcon字符识别的示例代码: ```python read_image(Image, 'characters.png') preprocessing(Image, Image, 'gray') threshold(Image, BinaryImage, 128, 255) reduce_domain(BinaryImage, Region, 100, 100, 200, 200) find_text(Region, TextRegions, 'auto', 'black', ['lines_gaps'], [30, 10], [30, 10]) num_chars := number_of_text(TextRegions) for i := 1 to num_chars crop_rectangle(Image, CharImage, TextRegions[i]) moments(CharImage, Moments) hu_moments(Moments, HuMoments) svm_classify(HuMoments, 'trained_classifier.svm', Result) write_string(Result) endfor ``` 在该代码中,首先读取图像并进行预处理,然后使用find_text函数定位字符并分割出来。接着,对每个字符进行特征提取,并使用svm_classify函数进行识别。最终输出识别结果。 需要注意的是,该示例代码仅供参考,实际应用中还需要根据具体情况进行调整和优化。同时,也需要准备好训练数据集,以便训练分类器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

self85

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值