需求:从下列各张图片中提取出桔子
代码:
dev_set_draw ('margin')
dev_set_line_width (3)
read_image (Image, 'C:/Users/ASUS/Desktop/halcon/桔子图片/citrus_fruits_01.png')
*列出文件夹中所有图片
list_files ('C:/Users/ASUS/Desktop/halcon/桔子图片', ['files','follow_links','recursive'], ImageFiles)
*选择合适的元素
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
*通过循环提取每一张图片中的橘子
for Index := 0 to |ImageFiles|-1 by 1
read_image (Image1, ImageFiles[Index])
rgb1_to_gray (Image1, GrayImage)
decompose3 (Image1, ImageR, ImageG, ImageB)
threshold (ImageR, Regions, 40, 255)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['circularity','area'], 'and', [0.8,150], [1,99999])
*显示图片
dev_display(Image1)
*显示所选区域
dev_display(SelectedRegions)
endfor
效果展示:
解释
1.为什么在红色通道(左)上进行阈值分割?因为图片背景偏靛蓝,若直接在原图转灰度的图像(右)上阈值分割,个别图片效果不好,如下图所示: