halcon入门之_提取遥控器字符并且写入txt文本
生活随笔
收集整理的這篇文章主要介紹了
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 1select_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/
總結
以上是生活随笔為你收集整理的halcon入门之_提取遥控器字符并且写入txt文本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【比特鹏哥C语言_1.初识C语言】
- 下一篇: XCZU19EG板卡设计资料:610-基