【halcon】学习记录

图像采集和二值化等处理

* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('USB3Vision', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '2E03187A8340_MachineVision_MVA5402MU90', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
* 不是以填充的形式显示,而是以轮廓的形式显示!
* dev_set_draw ('margin')
while (true) grab_image_async (Image, AcqHandle, -1) * Image Acquisition 01: Do something * rgb转灰度 rgb1_to_gray (Image, GrayImage) * 灰度显示 dev_display (GrayImage) * 二值化 打开灰度直方图 threshold (GrayImage, Regions, 113, 255) * 连接 区域内的连通区域 connection (Regions, ConnectedRegions)
* 有时候部分连通区域有孔洞,用fill_up进行填充
* fill_up (ConnectedRegions, RegionFillUp)
* 选择特定图像 打开特征直方图 select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 195661, 430454) * 区域中心坐标 area_center (SelectedRegions, Area, Row, Column) * 显示以上信息 disp_message (WindowHandle, '面积:' + Area + '坐标:' + Row + ',' + Column, 'window', 0, 0, 'blue', 'true') endwhile close_framegrabber (AcqHandle)

 PS:有时候一个区域select_shape不出来的时候,可以用特征直方图的 多个区域  与 /  或 来实现

数组和文件操作

* ***************************************
* 思路决定出路,方向导论  方法论 
* ***************************************
tuple  := [1, 2, 3, 4, 5]
Number := |tuple|
SingleElement := tuple[3]
part := tuple[1:3]
copy := tuple[0:|tuple|-1]

* 读图
read_image (Image, 'fabrik')
* 区域分割
regiongrowing (Image, Regions, 3, 3, 6, 100)
* 区域数量
count_obj (Regions, Number)

open_file ('D:/text1.txt', 'output', FileHandle)
for i := 1 to Number by 1
    * 选择第i块区域
    select_obj (Regions, ObjectSelected, i) 
    * 计算第i块的面积
    area_center (ObjectSelected, Area, Row, Column)
    * 写文件
    fwrite_string (FileHandle, i + ' ' + Area)
    * 创建换行符  清除输出缓冲区
    fnew_line (FileHandle) 
endfor
close_file (FileHandle)

open_file ('D:/text2.txt', 'output', FileHandle)
* select_obj (Regions, ObjectSelected, 1)
* 计算所有块的面积
area_center (Regions, Area, Row, Column)
fwrite_string (FileHandle, Area + ' ')
fnew_line (FileHandle)
close_file (FileHandle)

 图片加载和保存的方法

* ****************************
*     图片加载和保存的方法
* 1.尽量用.jpg,不要有.png的文件
* ****************************

* 1 Ctrl+R
read_image (Image01, 'E:/Halcon/Halcon_Study/MyImage/瓶盖.jpg')
* 单步调试/从不 的时候,需要显示调用dev_display
dev_display (Image01)



* 2 手动读图
* 但两幅图的格式似乎不能一样
read_image (Image02, ['E:/Halcon/Halcon_Study/MyImage/瓶盖.jpg','E:/Halcon/Halcon_Study/MyImage/棋盘标定.bmp'])



* 3 相机助手/选择文件 读图
* Image Acquisition 01: Code generated by Image Acquisition 01
read_image (Image03, 'E:/Halcon/Halcon_Study/MyImage/硬币.jpg')  




* 4 相机助手/选择文件路径 读图 
* 遍历整个文件夹的图片
* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('E:/Halcon/Halcon_Study/MyImage', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    * Image Acquisition 01: Do something
endfor


* 5 相机助手的自动采集图像
* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('USB3Vision', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '2E03187A8340_MachineVision_MVA5402MU90', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
    grab_image_async (Image, AcqHandle, -1)
    * Image Acquisition 01: Do something
endwhile
close_framegrabber (AcqHandle)


* 保存图像
write_image (Image, 'tiff', 0, 'E:/Halcon/Halcon_Study/MyImage')

图像预处理

滤波

5.1 Arithmetic
1. abs_image
功能:计算一个图像的绝对值(模数)。
2. add_image
功能:使两个图像相加。
3. div_image
功能:使两个图像相除。
4. invert_image
功能:使一个图像反像。
5. max_image
功能:按像素计算两个图像的最大值。
6. min_image
功能:按像素计算两个图像的最大小值。
7. mult_image
功能:使两个图像相乘。
8. scale_image
功能:为一个图像的灰度值分级。
9. sqrt_image
功能:计算一个图像的平方根。
10. sub_image
功能:使两个图像相减。

5.2 Bit 1. bit_and 功能:输入图像的所有像素的逐位与。 2. bit_lshift 功能:图像的所有像素的左移。 3. bit_mask 功能:使用位掩码的每个像素的逻辑与。 4. bit_not 功能:对像素的所有位求补。 5. bit_or 功能:输入图像的所有像素的逐位或。 6. bit_rshift 功能:图像的所有像素的右移。 7. bit_slice 功能:从像素中提取一位。 8. bit_xor 功能:输入图像的所有像素的逐位异或。

5.3 Color 1. cfa_to_rgb 功能:把一个单通道颜色滤波阵列图像变成RGB图像。 2. gen_principal_comp_trans 功能:计算多通道图像的主要部分分析的转换矩阵。 3. linear_trans_color 功能:计算多通道图像的颜色值的一个仿射转换。 4. principal_comp 功能:计算多通道图像的主要部分。 5. rgb1_to_gray 功能:把一个RGB图像转变成一个灰度图像。 6. rgb3_to_gray 功能:把一个RGB图像转变成一个灰度图像。 7. trans_from_rgb 功能:把一个图像从RGB颜色空间转变成任意颜色空间。 8. trans_to_rgb 功能:把一个图像从任意颜色空间转变成RGB颜色空间。

5.4 Edges 1.close_edges 功能:使用边缘幅值图像消除边缘缺陷。 2. close_edges_length 功能:使用边缘幅值图像消除边缘缺陷。 3. derivate_gauss 功能:用高斯派生物对一个图像卷积。 4. diff_of_gauss 功能:近似高斯的拉普拉斯算子。 5. edges_color 功能:使用Canny、Deriche或者_Shen_滤波器提取颜色边缘。 6. edges_color_sub_pix 功能:使用Canny、Deriche或者_Shen_滤波器提取子像素精确颜色边 缘。 7. edges_image 功能:使用Deriche、_Lanser、Shen或者_Canny滤波器提取边缘。 8. edges_sub_pix 功能:使用Deriche、_Lanser、Shen或者_Canny滤波器提取子像素精 确边缘。 9. frei_amp 功能:使用Frei-Chen算子检测边缘(幅值)。 10. frei_dir 功能:使用Frei-Chen算子检测边缘(幅值和相位)。 11. highpass_image 功能:从一个图像提取高频成分。 12. info_edges 功能:在edges_image估计滤波器的宽度。 13. kirsch_amp 功能:使用Kirsch算子检测边缘(幅值)。 14. kirsch_dir 功能:使用Kirsch算子检测边缘(幅值和相位)。 15. laplace 功能:使用有限差计算拉普拉斯算子。 16. laplace_of_gauss 功能:高斯的拉普拉斯算子。 17. prewitt_amp 功能:使用Prewitt算子检测边缘(幅值)。 18. prewitt_dir 功能:使用Prewitt算子检测边缘(幅值和相位)。 19. Roberts 功能:使用Roberts滤波器检测边缘。 20. robinson_amp 功能:使用Robinson算子检测边缘(幅值)。 21. robinson_dir 功能:使用Robinson算子检测边缘(幅值和相位)。 22. sobel_amp 功能:使用Sobel算子检测边缘(幅值)。 23. sobel_dir 功能:使用Sobel算子检测边缘(幅值和相位)。

5.5 Enhancement 1. adjust_mosaic_images 功能:全景图像的自动颜色更改。 2. coherence_enhancing_diff 功能:执行一个图像的一个一致性增强扩散。 3. emphasize 功能:增强图像对比度。 4. equ_histo_image 功能:图像的柱状图线性化。 5. illuminate 功能:增强图像对比度。 6. mean_curvature_flow 功能:把平均曲率应用在一个图像中。 7. scale_image_max_ 功能:最大灰度值在0到255范围内。 8. shock_filter 功能:把一个冲击滤波器应用到一个图像中。

5.6 FFT 1. convol_fft 功能:用在频域内的滤波器使一个图像卷积。 2. convol_gabor 功能:用在频域内的一个Gabor滤波器使一个图像卷积。 3. correlation_fft 功能:计算在频域内的两个图像的相互关系。 4. energy_gabor 功能:计算一个两通道图像的能量。 5. fft_generic 功能:计算一个图像的快速傅里叶变换。 6. fft_image 功能:计算一个图像的快速傅里叶变换。 7. fft_image_inv 功能:计算一个图像的快速傅里叶逆变换。 8. gen_bandfilter 功能:生成一个理想带通滤波器。 9. gen_bandpass 功能:生成一个理想带通滤波器。 10. gen_derivative_filter 功能:在频域内生成一个倒数滤波器。 11. gen_filter_mask 功能:在空域内存储一个滤波器掩码作为实时图像。 12. gen_gabor 功能:生成一个Gabor滤波器。 13. gen_gauss_filter 功能:在频域内生成一个高斯滤波器。 14. gen_highpass 功能:生成一个理想高通滤波器。 15. gen_lowpass 功能:生成一个理想低通滤波器。 16. gen_sin_bandpass 功能:用正弦形状生成一个带通滤波器。 17. gen_std_bandpass 功能:用高斯或者正弦形状生成一个带通滤波器。 18. optimize_fft_speed 功能:使FFT的运行时间最优化。 19. optimize_rft_speed 功能:使实值的FFT的运行时间最优化。 20. phase_deg 功能:返回用角度表示的一个复杂图像的相位。 21. phase_rad 功能:返回用弧度表示的一个复杂图像的相位。 22. power_byte 功能:返回一个复杂图像的功率谱。 23. power_ln_ 功能:返回一个复杂图像的功率谱。 24. power_real 功能:返回一个复杂图像的功率谱。 25. read_fft_optimization_data 功能:从一个文件中下载FFT速度最优数据。 26. rft_generic 功能:计算一个图像的实值快速傅里叶变换。 27. write_fft_optimization_data 功能:把FFT速度最优数据存储在一个文件中。

5.7 Geometric-Transformations 1. affine_trans_image 功能:把任意仿射2D变换应用在图像中。 2. affine_trans_image_size 功能:把任意仿射2D变换应用在图像中并且指定输出图像大小。 3. gen_bundle_adjusted_mosaic 功能:把多重图像合成一个马赛克图像。 4. gen_cube_map_mosaic 功能:创建球形马赛克的6方位图像。 5. gen_projective_mosaic 功能:把多重图像合成一个马赛克图像。 6. gen_spherical_mosaic 功能:创建一个球形马赛克图像。 7. map_image 功能:把一个一般变换应用于一个图像中。 8. mirror_image 功能:镜像一个图像。 9. polar_trans_image 功能:把一个图像转换成极坐标。 10. polar_trans_image_ext 功能:把一个图像中的环形弧转变成极坐标。 11. polar_trans_image_inv 功能:把极坐标中的图像转变成直角坐标。 12. projective_trans_image 功能:把投影变换应用于一个图像中。 13. projective_trans_image_size 功能:把投影变换应用于一个图像中并且指定输出图像的大小。 14. rotate_image 功能:以一个图像的中心为圆心旋转。 15. zoom_image_factor 功能:把一个图像缩放规定因子倍。 16. zoom_image_size 功能:把一个图像缩放到规定大小。

5.8 Inpainting 1. harmonic_interpolation 功能:对一个图像区域执行谐波插值。 2. inpainting_aniso 功能:通过各向异性扩散执行图像修复。 3. inpainting_ced 功能:通过一致性增强扩散执行图像修复。 4. inpainting_ct 功能:通过连贯传送执行图像修复。 5. inpainting_mcf 功能:通过水平线平滑执行图像修复。 6. inpainting_texture 功能:通过结构传导执行图像修复。

5.9 Lines 1. bandpass_image 功能:使用带通滤波器提取边缘。 2. lines_color 功能:检测色线和它们的宽度。 3. lines_facet 功能:使用面模型检测线。 4. lines_gauss 功能:检测线和它们的宽度。

5.10 Match 1. exhaustive_match 功能:模板和图像的匹配。 2. exhaustive_match_mg 功能:在一个分辨率塔式结构中匹配模板和图像。 3. gen_gauss_pyramid 功能:计算一个高斯金字塔。 4. monotony 功能:计算单一操作。

5.11 Misc 1. convol_image 功能:用一个任意滤波掩码对一个图像卷积。 2. expand_domain_gray 功能:扩大图像区域并且在扩大的区域中设置灰度值。 3. gray_inside 功能:对图像中的每一点在图像边界的任意路径计算尽可能低的灰度 值。 4. gray_skeleton 功能:灰度值图像的细化。 5. lut_trans 功能:使用灰度值查询表转换一个图像。 6. symmetry 功能:沿一行的灰度值的对称性。 7. topographic_sketch 功能:计算一个图像的地理原始草图。

5.12 Noise 1. add_noise_distribution 功能:向一个图像添加噪声。 2. add_noise_white 功能:向一个图像添加噪声。 3. gauss_distribution 功能:产生一个高斯噪声分布。 4. noise_distribution_mean 功能:测定一个图像的噪声分布。 5. sp_distribution 功能:产生一个椒盐噪声分布。

5.13 Optical-Flow 1. optical_flow_mg 功能:计算两个图像之间的光流。 2. unwarp_image_vector_field 功能:使用一个矢量场来展开一个图像。 3. vector_field_length 功能:计算一个矢量场的矢量长度。

5.14 Points 1. corner_response 功能:在图像中寻找角点。 2. dots_image 功能:在一个图像中增强圆形点。 3. points_foerstner 功能:使用Förstner算子检测关注点。 4. points_harris 功能:使用Harris算子检测关注点。 5. points_sojka 功能:使用Sojka算子找出角点。
5.15 Smoothing 1. anisotrope_diff 功能:通过保边各向异性扩散平滑一个图像。 2. anisotropic_diffusion 功能:对一个图像执行各向异性扩散。 3. binomial_filter 功能:使用binomial滤波器平滑一个图像。 4. eliminate_min_max 功能:在空域内平滑一个图像来抑制噪声。 5. eliminate_sp 功能:用中值替代阀值外的值。 6. fill_interlace 功能:插补两个半个视频图像。 9. gauss_image 功能:使用离散高斯函数平滑图像。 10. info_smooth 功能:平滑滤波器smooth_image的信息。 11. isotropic_diffusion 功能:对一个图像执行各向同性扩散。 12. mean_image 功能:通过平均平滑一个图像。 13. mean_n 功能:几个通道的平均灰度值。 14. mean_sp 功能:抑制椒盐噪声。 15. median_image 功能:使用不同级别掩码的中值滤波16. median_separate_ 功能:使用矩形掩码的离散中值滤波。 17. median_weighted 功能:使用不同级别掩码的加权中值滤波。 18. midrange_image 功能:计算掩码内最大和最小值的平均。 19. rank_image 功能:通过一个任意等级掩码平滑一个图像。 20. sigma_image 功能:使用sigma滤波器的非线性平滑。 21. smooth_image 功能:使用递归滤波器平滑一个图像。 22. trimmed_mean 功能:使用任意等级掩码平滑一个图像。 5.16 Texture 1. deviation_image 功能:计算矩形窗口内的灰度值的标准偏差。 2. entropy_image 功能:计算矩形窗口内的灰度值的熵。 3. texture_laws 功能:使用一个Laws文本滤波器过滤一个图像。
5.17 Wiener-Filter 1. gen_psf_defocus 功能:产生一个均匀散焦模糊的脉冲相应。 2. gen_psf_motion 功能:产生一个(线性)运动模糊的脉冲相应。 3. simulate_defocus 功能:对一个图像的均匀散焦模糊进行仿真。 4. simulate_motion 功能:(线性)运动模糊的仿真。 5. wiener_filter 功能:通过Wiener滤波进行图像恢复。 6. wiener_filter_ni 功能:通过Wiener 滤波进行图像恢复。
原文地址:https://www.cnblogs.com/-Mr-y/p/8407152.html