首页 > TAG信息列表 > HV
[原创]移动相机九点标定工具原理及实现(包涵部分源码)
1. 移动相机标定与固定相机的标定有什么差异? 书接上文 [原创]一种自动化九点标定工具原理(包涵部分源码) 移动相机(眼在手上):相机安装在龙门架的Z轴上 相机拍照得出来来的位置与当前龙门架实际点位有关系,有什么关系呢?答案:平移关系,只比固定相机多了一个平移关系 怎么理解呢?假如以相机halcon-实例:根据颜色提取想要的对象
实例目的:提取最上面黄色的线 在HDevelop中 dev_close_window () read_image (Image, 'D:/bb/tu/8.png') get_image_size (Image, Width, Height) decompose3 (Image, Red, Green, Blue) *将RGB三通道数据转化为HSV色彩空间的三通道图像数据 *HSV:看https://blBat系列---【windows11家庭版如何安装hyper-v虚拟机?】
1.在桌面上新建hyper.txt文件,把下面的内容粘进去 pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hv.txt for /f %%i in ('findstr /i . hv.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Pahalcon-query_font返回可用字体
在HDevelop中 dev_update_off() read_image (Image, 'D:/bb/tu/ma.jpg') get_image_size (Image, Width, Height) dev_open_window(0,0,Width, Height,'black',WindowHandle) dev_display (Image) query_font (WindowHandle, Font) *返回可用字体 *参数2:返回可用字体halcon-orientation_region返回区域的方向
7.png 在HDevelop中 dev_update_off() dev_close_window () read_image (Clip, 'D:/bb/tu/7.png') get_image_size (Clip, Width, Height) dev_open_window (0, 0, Width, Height, 'black', WindowID) dev_display (Clip) *设置窗口字体显示,字体大小,字体样式,粗体,斜体 shalcon-local_threshold局部阈值--适合不均匀照明
在HDevelop中 read_image (Image, 'D:/bb/tu/11.png') get_image_size (Image, Width, Height) dev_open_window (10, 10, Width, Height, 'black', WindowHandle) local_threshold (Image, Region, 'adapted_std_deviation', 'dahalcon-set_tposition设置文本光标的位置
在HDevelop中 dev_close_window () dev_open_window (0, 0, 200, 200, 'black', WindowID) dev_set_color ('green') set_tposition (WindowID, 100,50) *设置文本光标的位置 *参数1:窗口句柄 *参数2:行坐标 *参数3:列坐标 a:=14 write_string (WindowID, '中国人口:'+1halcon-hough_lines霍夫变换寻找直线
在HDevelop中 read_image (Image, 'D:/bb/tu/20.jpg') get_image_size (Image, Width, Height) sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3) *计算边缘 threshold (EdgeAmplitude, Region, 50, 255) *通过阈值把边缘图像变成区域 connection (Region, ConnectedRehalcon-read_ncc_model读取ncc模板
在HDevelop中 dev_close_window () read_image (W, 'D:/bb/tu/8.jpg') rgb1_to_gray (W, GrayImage) read_ncc_model ('D:/bb/tu/SS.ncm', ModelID) *读取ncc模板 find_ncc_model (GrayImage, ModelID, -0.2, 0.2, 0.8, 3, 0.5, 'true', 0,halcon-read_shape_model读取形状模板
在HDevelop中 dev_close_window () read_image (Image, 'D:/bb/tu/1.jpg') rgb1_to_gray (Image, GrayImage) read_shape_model ('D:/bb/tu/ss.shm', ModelID) *读取形状模板 *参数2:模板句柄 find_shape_model (GrayImage, ModelID, -0.2, 0.2, 0.8, 5, 0.5, 'halcon-find_shape_model形状模板匹配
形状匹配原理:模板创建后,会根据模板中的边缘等关系去图像中进行搜索,可以理解成提取模板中的灰度发生变化的那些点,然后再去图像中匹配,这样的效果是对干扰比较稳定,匹配速度快,并且即使边缘发生部分遮挡,匹配效果依旧较好 在HDevelop中 dev_close_window () read_image (Image,halcon-create_ncc_model创建NCC模板
在HDevelop中 dev_close_window () read_image (W, 'D:/bb/tu/8.jpg') rgb1_to_gray (W, GrayImage) ****截取模板图像:O字母**** gen_rectangle1 (Rectangle, 30, 378, 89, 440) reduce_domain (GrayImage, Rectangle, ImageReduced) ****创建模板**** create_ncc_modhalcon-get_polygon_xld返回XLD轮廓近似Polygon的数据
在HDevelop中 dev_close_window () read_image (Image, 'D:/bb/tu/4.jpg') rgb1_to_gray (Image, GrayImage) edges_sub_pix (GrayImage, Edges, 'canny', 1, 5, 10) *亚像素边缘 select_shape_xld (Edges, SelectedXLD, ['area'], 'andhalcon-gen_ellipse_contour_xld创建椭圆弧的XLD轮廓
在HDevelop中 dev_close_window () read_image (Image, 'D:/bb/tu/8.jpg') rgb1_to_gray (Image, GrayImage) edges_sub_pix (GrayImage, Edges, 'canny', 1, 5, 10) *亚像素边缘 select_shape_xld (Edges, SelectedXLD, 'contlength', 'andhalcon-gen_polygons_xld返回XLD轮廓近似的Polygon
在HDevelop中 dev_close_window () read_image (Image, 'D:/bb/tu/4.jpg') rgb1_to_gray (Image, GrayImage) edges_sub_pix (GrayImage, Edges, 'canny', 1, 5, 10) *亚像素边缘 select_shape_xld (Edges, SelectedXLD, ['area'], 'and&halcon-draw_ellipse手动画椭圆
在HDevelop中 dev_update_off() dev_open_window(10,10,400, 400,'black',WindowHandle) draw_ellipse (WindowHandle, Row, Column, Phi, Radius1, Radius2) *在指定窗口手动画椭圆 *参数1:窗口句柄 *参数2:中心的行坐标-->y坐标 *参数3:中心的列坐标-->x坐标 *参数4:长轴的方向(弧halcon-skeleton求区域的骨架
区域骨架:骨架可以理解为区域的中轴 在HDevelop中 read_image (Image, 'D:/bb/tu/6.jpg') rgb1_to_gray(Image,Image1) threshold (Image1, Region,[80,87,206,195] , [90,100, 228,205]) *union1 (Region, RegionUnion) skeleton (Region, Skeleton) *求区域的骨架 *参halcon-fill_up_shape填充区域或区域集中具有给定形状特征的孔
在HDevelop中 read_image (Image, 'D:/bb/tu/5.jpg') rgb1_to_gray(Image,Image1) threshold (Image1, Region,[190,85,105] , [205,100, 115]) fill_up_shape (Region, RegionFillUp, 'area', 1, 10000) *填充输入区域或区域集中具有给定形状特征的那些孔 *参数1:输入halcon-smallest_rectangle1返回最小外接正矩形数据
在HDevelop中 read_image (Image, 'D:/bb/tu/5.jpg') rgb1_to_gray(Image,Image1) threshold (Image1, Region,[75] , [90]) smallest_rectangle1 (Region, Row1, Column1, Row2, Column2) *返回最小外接正矩形数据 *参数1:输入区域 *参数2:左上角点的行坐标-y坐标 *参数3halcon-闭运算(先膨胀后腐蚀)
闭运算:对区域先进行膨胀操作,然后对膨胀的结果再进行膨胀操作,称为闭运算闭运算特点:具有与膨胀相似的特点,但是能够防止区域膨胀过度,能够很好的保持区域的形状。 效果:能填补缝隙 closing_circle区域圆闭运算 在HDevelop中 dev_update_off() read_image (Image, 'D:/bb/tuhalcon-开运算(先腐蚀再膨胀)
开运算:对区域先进行腐蚀操作,然后对腐蚀的结果再进行膨胀操作,称为开运算开运算特点:具有与腐蚀相似的特点,但是能够防止区域腐蚀过度,能够很好的保持区域的形状。 opening_circle区域圆开运算 在HDevelop中 dev_update_off() read_image (Image, 'D:/bb/tu/1.jpg') rgb1_to_grayhalcon-gray_dilation_rect图像膨胀
在HDevelop中 dev_update_off() read_image (Image, 'D:/bb/tu/1.jpg') rgb1_to_gray(Image,Image1) *将RGB图像转换为灰度图像 gray_dilation_rect (Image1, ImageMax, 5, 5) *图像膨胀-->效果:增加亮部,减少暗 *参数1:灰度值图像 *参数2:输出图像 *参数3和参数4:结构元的halcon-erosion_rectangle1矩形腐蚀
1.jpg 在HDevelop中 dev_update_off() read_image (Image, 'D:/bb/tu/1.jpg') rgb1_to_gray(Image,Image1) *将RGB图像转换为灰度图像 threshold (Image1, Region, 200, 230) erosion_rectangle1 (Region, RegionErosion, 5, 5) *矩形区域腐蚀 *参数1:需要腐蚀的区域 *halcon-dilation_rectangle1矩形膨胀
1.jpg 在HDevelop中 dev_update_off() read_image (Image, 'D:/bb/tu/1.jpg') rgb1_to_gray(Image,Image1) *将RGB图像转换为灰度图像 threshold (Image1, Region, 200, 230) dilation_rectangle1 (Region, RegionDilation, 11, 11) *矩形膨胀 *参数1:膨胀区域 *输出区halcon-gray_histo计算直方图
ma.jpg 在HDevelop中 dev_update_off() read_image (Image, 'D:/bb/tu/ma.jpg') rgb1_to_gray(Image,Image1) *将RGB图像转换为灰度图像 get_image_size (Image1, Width, Height) dev_open_window(10,10,Width, Height,'black',WindowHandle) get_domain (Im