在Halcon中,颜色提取通常用于从图像中提取特定颇具的区域或对象。
将输入的 RGB 颜色空间转换为 HSV
* 根据颜色提取想要的目标
for Index:=1 to 2 by 1
read_image (Image, 'cable'+Index)
* 获取一个三通道图像中每个通道的图像
* 红色通道(R)、绿色通道(G)和蓝色通道(B)
decompose3 (Image, R, G, B)
* 将输入的 RGB 颜色空间转换为 HSV(色相、饱和度、亮度)颜色空间
* R、G、B 分别代表红、绿、蓝通道的图像数据,
* H、S、V 分别用于存储转换后的色相、饱和度、亮度信息。
* rgb 不利于某些特定的颜色查找
trans_from_rgb (R, G, B, H, S, V, 'hsv')
* 二值化
threshold (S, Region, 100, 255)
* 将筛选后的图像从H色调中提取出来
reduce_domain (H, Region, ImageReduced)
* 将上述色调进行阈值处理
threshold (ImageReduced, Region1, 30, 70)
* 连通性
connection (Region1, ConnectedRegions)
* 筛选
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
* 闭运算
closing_circle (SelectedRegions, RegionClosing, 3.5)
dev_clear_window ()
dev_set_color ('blue')
dev_set_draw ('margin')
dev_display (Image)
dev_display (RegionClosing)
endfor
将Bayer格式的彩色滤波图像阵列图像转换为RGB彩色图像
read_image (Image1, 'patras')
* 获取三通道
decompose3 (Image1, R, G, B)
* rgb过度hsv
trans_from_rgb (R, G, B, H, S, V, 'hsv')
* 将HSV(色相、饱和度、亮度)颜色空间转换为 RGB(红绿蓝)颜色空间
* R2、G2、B2 分别表示转换后的 RGB 图像的红色通道、绿色通道和蓝色通道。
trans_to_rgb (H, S, V, R2, G2, B2, 'hsv')
* 将给定的三个单通道图像 R、G、B 合成为一个多通道图像
compose3 (R, G, B, MultiChannelImage)
* 将基于 Bayer 格式的彩色滤波阵列(CFA,Color Filter Array)图像通过双线性插值算法转换为 RGB 彩色图像
* 参数三:'bayer_gb' 表示输入图像的 Bayer 格式类型为 GB 格式,
* 参数四:'bilinear' 表示使用双线性插值算法进行颜色插值处理
cfa_to_rgb (MultiChannelImage, RGBImage, 'bayer_gb', 'bilinear')
根据霍夫变换寻找直线
read_image (Image, '矩阵')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
*剪切指定的矩形图像
rectangle1_domain (Image, ImageReduced, 198, 279, 340, 590)
*选中矩形的边缘
sobel_amp (ImageReduced, EdgeAmplitude, 'thin_sum_abs', 3)
dev_set_color ('red')
threshold (EdgeAmplitude, Region, 10, 255)
connection (Region, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
* 根据霍夫变换寻找直线
* 参数一:输入图像
* 参数二:调整角度区域的分辨率。
* 参数三:阈值
* 参数四:图像中两个最大值的最小距离
* 参数五:图像中两个最大值的最小距离
* 参数六:线的法线角度(单位弧度)
* 参数七:检测到的线与原点的距离。
hough_lines (SelectedRegions, 4, 100, 5, 5, Angle, Dist)
dev_set_color ('blue')
*将查找到的线转换为区域
gen_region_hline (Regions, Angle, Dist)
*过滤无效的线
select_shape (Regions, SelectedRegions1, 'orientation', 'and', 0, 4)
dev_display (Image)
dev_display (SelectedRegions1)