├── .gitattributes ├── .gitignore ├── OCR文字识别_神经网络训练 ├── OCR_mlp神经网络分类器_字符识别.hdev ├── 机票快递图片.jpg ├── 点状字母数字识别.hdev ├── 点状字母数字识别_mlp.hdev ├── 点状字母数字识别_text_model.hdev ├── 环形文字识别.hdev ├── 罗超书.jpg ├── 罗超书字体识别_使用创建的mlp神经分类器.hdev └── 罗超书字体识别_创建mlp神经分类器.hdev ├── Qt ├── HalconAlgoTest_使用HalconWindow │ ├── HalconAlgoTest.sln │ ├── include │ │ └── HalconDeepLearning │ │ │ ├── HalconDeepLearning.h │ │ │ └── halcondeeplearning_global.h │ ├── lib │ │ ├── HalconDeepLearning.lib │ │ ├── HalconDeepLearningd.lib │ │ └── LensCheckAlgorithm.lib │ └── src │ │ └── HalconAlgoTest │ │ ├── HalconAlgoTest.cpp │ │ ├── HalconAlgoTest.h │ │ ├── HalconAlgoTest.qrc │ │ ├── HalconAlgoTest.ui │ │ ├── HalconAlgoTest.vcxproj │ │ ├── HalconAlgoTest.vcxproj.filters │ │ └── main.cpp ├── HalconDeepLearningTest │ ├── HalconAlgoTest.sln │ ├── include │ │ └── HalconDeepLearning │ │ │ ├── HalconDeepLearning.h │ │ │ └── halcondeeplearning_global.h │ ├── lib │ │ ├── HalconDeepLearningd.lib │ │ └── LensCheckAlgorithmd.lib │ └── src │ │ ├── HalconAlgoTest │ │ ├── HalconAlgoTest.cpp │ │ ├── HalconAlgoTest.h │ │ ├── HalconAlgoTest.qrc │ │ ├── HalconAlgoTest.ui │ │ ├── HalconAlgoTest.vcxproj │ │ ├── HalconAlgoTest.vcxproj.filters │ │ └── main.cpp │ │ ├── HalconDeepLearning │ │ ├── HalconDeepLearning.cpp │ │ ├── HalconDeepLearning.h │ │ ├── HalconDeepLearning.vcxproj │ │ ├── HalconDeepLearning.vcxproj.filters │ │ ├── halconAlgorithm.cpp │ │ └── halcondeeplearning_global.h │ │ └── LensCheckAlgorithm │ │ ├── HalconAlgorithm.h │ │ ├── LensCheckAlgorithm.cpp │ │ ├── LensCheckAlgorithm.h │ │ ├── LensCheckAlgorithm.vcxproj │ │ ├── LensCheckAlgorithm.vcxproj.filters │ │ ├── LensCheckAlgorithmPrivate.cpp │ │ ├── LensCheckAlgorithmPrivate.h │ │ ├── algorithm │ │ └── halconLensCheck.cpp │ │ └── lenscheckalgorithm_global.h ├── Matching │ ├── main.cpp │ ├── matching.cpp │ ├── matching.h │ ├── matching.pro │ ├── qhalconwindow.cpp │ ├── qhalconwindow.h │ └── readme.txt └── simpleCamera │ ├── CMakeLists.txt │ └── src │ ├── CMakeLists.txt │ └── MainUI │ ├── CMakeLists.txt │ ├── main.cpp │ ├── mainui.cpp │ ├── mainui.h │ └── mainui.ui ├── algorithm.hdev ├── mlp颜色识别 ├── colors.hdev └── 使用训练好的模型识别color.hdev ├── project └── 差异模型寻找缺陷 │ └── 差异模型寻找缺陷.hdev ├── 图像分割 ├── 分水岭 │ └── watersheds.hdev ├── 区域生长法 │ ├── regiongrowing_mean多点区域增长.hdev │ └── regiongrowing区域生长.hdev └── 阈值处理 │ ├── auto_threshold自适应阈值_根据灰度直方图的波峰分割.hdev │ ├── binary_threshold单一背景自动阈值分割.hdev │ ├── char_threshold字符提取_提取灰度曲线峰值.hdev │ ├── dyn_threshold局部阈值分割_不明显数字分割.hdev │ ├── dyn_threshold局部阈值分割_大蒜.hdev │ ├── threshold全局阈值处理.hdev │ └── var_threshold变化分割.hdev ├── 图像增强 ├── 图像平滑与去噪 │ ├── gauss高斯滤波.hdev │ ├── mean中值滤波.hdev │ └── median中值滤波.hdev ├── 增强对比度 │ ├── emphasise.hdev │ └── scale_img.hdev ├── 直方图均衡 │ └── equHisto.hdev └── 锐化失焦图像 │ └── shockFilter冲击滤波器.hdev ├── 寻找手机关屏幕状态 └── algorithm.hdev ├── 形态学处理 ├── bottom_hat底帽操作.hdev ├── closing闭运算.hdev ├── dilation膨胀.hdev ├── erosion腐蚀.hdev ├── opening开运算.hdev ├── top_hat顶帽操作.hdev ├── 底帽提取暗图区域.hdev ├── 灰度图膨胀腐蚀开闭操作.hdev └── 计算图片的树木个数.hdev ├── 手眼标定 ├── 九点标定算子.hdev ├── 制作标定板.hdev ├── 眼在手上 │ ├── GetZYZDegree.hdvp │ ├── calcData │ │ ├── final_campar.dat │ │ ├── final_pose_base_calplate.dat │ │ ├── final_pose_base_plane.dat │ │ └── final_pose_cam_tool.dat │ ├── caltab.descr │ ├── caltab.ps │ ├── innerPara.cal │ ├── objTest │ │ ├── objPose │ │ │ ├── robot_pose_trainImg.dat │ │ │ └── robot_pose_trainImgPurpose.dat │ │ ├── rawObjPose.csv │ │ ├── temp.csv │ │ ├── writePicture.hdev │ │ └── 机器人位姿生成.hdev │ ├── outPara.dat │ ├── pose.csv │ ├── poseIn.xlsx │ ├── robotPose │ │ ├── robot_pose_000.dat │ │ ├── robot_pose_001.dat │ │ ├── robot_pose_002.dat │ │ ├── robot_pose_003.dat │ │ ├── robot_pose_004.dat │ │ ├── robot_pose_005.dat │ │ ├── robot_pose_006.dat │ │ ├── robot_pose_007.dat │ │ ├── robot_pose_008.dat │ │ ├── robot_pose_009.dat │ │ ├── robot_pose_010.dat │ │ ├── robot_pose_011.dat │ │ ├── robot_pose_012.dat │ │ ├── robot_pose_013.dat │ │ ├── robot_pose_014.dat │ │ ├── robot_pose_015.dat │ │ ├── robot_pose_016.dat │ │ ├── robot_pose_017.dat │ │ └── robot_pose_018.dat │ ├── roiModel.shm │ ├── temp.csv │ ├── temp步骤.txt │ ├── 存储标定图片.hdev │ ├── 手眼标定相机可移动无3D预览.hdev │ ├── 手眼标定眼在手上使用标定结果夹取物品_匹配缩放模型生成.hdev │ ├── 手眼标定眼在手上使用标定结果夹取物品_实时识别缩放物体.hdev │ ├── 机器人位姿生成.hdev │ ├── 机器人指令查询.xlsx │ └── 机器人连接.png └── 简单九点标定 │ └── simple9Calibration.hdev ├── 文件读取 └── csv文件读取 │ ├── csv_read.hdev │ └── test.csv ├── 板子焊点寻找 └── algorithm.hdev ├── 模板匹配 ├── 基于描述符的模板匹配 │ └── descriptor_model基于描述符的模板.hdev ├── 局部形变匹配 │ └── local_deformable局部形变匹配.hdev ├── 形状匹配 │ ├── baseImg.tif │ ├── matchShapeModel.hdev │ ├── 使用模板文件.hdev │ ├── 生成模板文件.hdev │ └── 箭头匹配.hdev ├── 相关性匹配 │ ├── ncc_model使用保存的模型文件寻找.hdev │ └── ncc_model创建并保存为文件.hdev └── 组件匹配 │ ├── 使用组件文件.hdev │ └── 生成组件文件.hdev ├── 测量拟合 └── 矩形直线测量对 │ └── measPairs.hdev ├── 深度学习 ├── 分类 │ ├── Mnist缺陷检测 │ │ └── classify_Mnist_deep_learning.hdev │ └── 水果分类 │ │ └── classify_fruit_deep_learning.hdev └── 检测 │ └── 找水杯 │ ├── images │ ├── imagesimg_0.jpg │ ├── imagesimg_1.jpg │ ├── imagesimg_10.jpg │ ├── imagesimg_11.jpg │ ├── imagesimg_12.jpg │ ├── imagesimg_13.jpg │ ├── imagesimg_14.jpg │ ├── imagesimg_15.jpg │ ├── imagesimg_16.jpg │ ├── imagesimg_17.jpg │ ├── imagesimg_18.jpg │ ├── imagesimg_19.jpg │ ├── imagesimg_2.jpg │ ├── imagesimg_20.jpg │ ├── imagesimg_21.jpg │ ├── imagesimg_3.jpg │ ├── imagesimg_4.jpg │ ├── imagesimg_5.jpg │ ├── imagesimg_6.jpg │ ├── imagesimg_7.jpg │ ├── imagesimg_8.jpg │ └── imagesimg_9.jpg │ ├── labels.hdict │ ├── 图片大小缩放.hdev │ ├── 杯子检测_demo.hdev │ ├── 杯子训练_demo.hdev │ └── 杯子训练项目.dltp ├── 特征提取 ├── area_center.hdev ├── area_center_gray测试三维灰度图的体积中心.hdev ├── area_holes计算孔洞面积.hdev ├── gen_cooc_matrix共生矩阵判定纹理 │ ├── gen_cooc_matrix共生矩阵判定纹理_使用训练文件.hdev │ ├── gen_cooc_matrix共生矩阵判定纹理_生成训练文件.hdev │ ├── picture │ │ ├── tree0.jpg │ │ ├── tree1.jpg │ │ └── tree2.jpg │ └── train.omc ├── gray_features灰度图特征参数显示.hdev ├── inner_circle最大内接圆.hdev ├── intensiy求取均值与偏差.hdev ├── min_max_gray灰度图中最大最小灰度值.hdev ├── select_gray灰度图特征筛选.hdev ├── select_shape特征选择_gen_image_proto清除指定区域.hdev └── smallest_rectangle2.hdev ├── 相机标定 ├── caltab.descr ├── caltab.ps ├── paras.cal ├── pos.dat ├── 代码生成标定参数.hdev ├── 使用标定板文件.hdev └── 生成标定板文件.hdev ├── 简单相机采图处理 └── grabDealImg.hdev ├── 车牌识别 ├── 倾斜车牌.jpg └── 车牌识别.hdev ├── 边缘检测 ├── derivate_gauss图像边缘提取.hdev ├── edges_color_sub_pix彩图xld提取.hdev ├── edges_image新式边缘检测.hdev ├── edges_sub_pix亚像素边缘提取.hdev ├── fit_circle_contour_xld拟合圆形轮廓.hdev ├── laplace_of_gauss配合zero_crossing检测.hdev ├── laplace配合zero_crossing检测.hdev ├── lines_color彩图边缘线段提取.hdev ├── lines_gauss边缘线段提取.hdev ├── sobel_amp索贝尔求梯度.hdev └── xld提取_分割_筛选_连接.hdev ├── 透视形变图像校正 └── matrix2DConvert.hdev ├── 颜色与纹理 ├── decompose_sub_image分离通道后颜色相减求蓝色.hdev └── texture_laws纹理滤波器.hdev └── 颜色识别 └── yellowColor.hdev /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /OCR文字识别_神经网络训练/OCR_mlp神经网络分类器_字符识别.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | *读取图片 8 | read_image (Image, 'E:/practice/halcon/HalconAlgorithm/OCR文字识别_神经网络训练/机票快递图片.jpg') 9 | dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) 10 | * dev_display (Image) 11 | *转换图片到hsv空间 12 | decompose3 (Image, rchn, gchn, bchn) 13 | trans_from_rgb (rchn, gchn, bchn, hue, saturation, intensity, 'hsv') 14 | 15 | *二值化分 16 | threshold (saturation, Regions, 0, 84) 17 | *膨胀后填充内部,方便特征筛选 18 | dilation_rectangle1 (Regions, RegionDilation, 5, 5) 19 | fill_up (RegionDilation, RegionFillUp) 20 | *分离连接件 21 | connection (RegionFillUp, ConnectedRegions) 22 | *特征过滤 23 | select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 2039.4, 72942.6) 24 | *联合后拟合矩形,找到旋转角度 25 | union1 (SelectedRegions, RegionUnion) 26 | shape_trans (RegionUnion, RegionTrans, 'rectangle2') 27 | orientation_region (RegionTrans, Phi) 28 | *找到旋转矩形 29 | area_center (RegionTrans, Area, Row, Column) 30 | vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D) 31 | *旋转后效果 32 | affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor') 33 | affine_trans_image (saturation,ImageAffineTrans, HomMat2D, 'constant', 'false') 34 | *裁剪出目标区域 35 | reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced) 36 | *二值化分 37 | threshold (ImageReduced, Regions1, 0, 89) 38 | *分离连接件 39 | connection (Regions1, ConnectedRegions1) 40 | *特征值选择出目标字体 41 | select_shape (ConnectedRegions1, SelectedRegions1, ['area','row1'], 'and', [430.17,0], [10000,1046.13]) 42 | *膨胀连接字体本身 43 | dilation_circle (SelectedRegions1, RegionDilation1, 8) 44 | *联合后分离出单个的字 45 | union1 (RegionDilation1, RegionUnion1) 46 | * erosion_rectangle1 (RegionUnion1, RegionOpening, 20, 20) 47 | connection (RegionUnion1, ConnectedRegions2) 48 | *排序显示 49 | sort_region (ConnectedRegions2, SortedRegions, 'first_point', 'true', 'column') 50 | *创建空的容器,用于存放检索的字 51 | gen_empty_obj (wordsRegion) 52 | *将字放入容器中 53 | count_obj (SortedRegions, Number) 54 | for i:=1 to Number by 1 55 | *选择单个字的region 56 | select_obj (SortedRegions, ObjectSelected, i) 57 | *与原图做交集,获得原图的字 58 | intersection (Regions1,ObjectSelected,RegionIntersection) 59 | *将原图的字放入容器中 60 | insert_obj (wordsRegion,RegionIntersection, wordsRegion, i) 61 | endfor 62 | 63 | *创建训练文件 64 | wordFile:='D:/word.trf' 65 | *将每个字存入训练文件 66 | words:=['机','票'] 67 | * count_obj(wordsRegion, Number1) 68 | * for i := 1 to Number1 by 1 69 | * select_obj (wordsRegion, singleWord, i) 70 | * append_ocr_trainf (singleWord, ImageAffineTrans, words[i-1], wordFile) 71 | * endfor 72 | *采用批处理 73 | write_ocr_trainf (wordsRegion, ImageAffineTrans, words, wordFile) 74 | 75 | *创建模板文件 76 | fontPatternFile:='D:/word.omc' 77 | *创建神经网络分类器 78 | create_ocr_class_mlp (10, 30, 'constant', 'default', words, 80, 'none', 10, 42, OCRHandle) 79 | *使用训练文件训练分类器 80 | trainf_ocr_class_mlp (OCRHandle, wordFile, 200, 1, 0.01, Error, ErrorLog) 81 | *保存训练的文件 82 | write_ocr_class_mlp (OCRHandle, fontPatternFile) 83 | *清除句柄 84 | clear_ocr_class_mlp (OCRHandle) 85 | 86 | *使用训练好的模板进行文字识别 87 | read_ocr_class_mlp ('D:/word.omc', OCRHandle1) 88 | do_ocr_multi_class_mlp (wordsRegion, ImageReduced, OCRHandle1, Class, Confidence) 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /OCR文字识别_神经网络训练/机票快递图片.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/OCR文字识别_神经网络训练/机票快递图片.jpg -------------------------------------------------------------------------------- /OCR文字识别_神经网络训练/点状字母数字识别.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | read_image (origiImage, 'C:/Users/Public/Documents/MVTec/HALCON-18.11-Progress/examples/images/ocr/dot_print_03.png') 8 | gen_rectangle1 (ROI_0, 112, 36, 420, 576) 9 | text_line_orientation (ROI_0, origiImage, 25, -0.523599, 0.523599, OrientationAngle) 10 | area_center (ROI_0, Area, Row, Column) 11 | vector_angle_to_rigid (Row, Column, OrientationAngle, Row, Column, 0, HomMat2D) 12 | affine_trans_image (origiImage, ImageAffineTrans, HomMat2D, 'constant', 'false') 13 | *创建文字读取model 14 | create_text_model_reader ('auto', 'DotPrint_Rej.omc', TextModel) 15 | *设置为读取点状文字 16 | set_text_model_param (TextModel, 'dot_print', 'true') 17 | *查找 18 | find_text (ImageAffineTrans, TextModel, TextResultID) 19 | *获得项 20 | get_text_object (Characters, TextResultID, 'all_lines') 21 | *获得结果 22 | get_text_result (TextResultID, 'num_lines', lineNum) 23 | get_text_result (TextResultID, 'class', ResultValue) 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /OCR文字识别_神经网络训练/点状字母数字识别_mlp.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | read_image (origiImage, 'C:/Users/Public/Documents/MVTec/HALCON-18.11-Progress/examples/images/dot_print_rotated/dot_print_rotated_02.png') 8 | *用一个矩形框把目标检测区域圈出来 9 | gen_rectangle1 (textRoi, 57.8893, 19.7151, 458.963, 612.403) 10 | *对目标区判定字的倾斜角度 11 | text_line_orientation (textRoi, origiImage, 25, -0.523599, 0.523599, textOrientationAngle) 12 | *将图片转回来 13 | area_center (textRoi, Area, Row, Column) 14 | vector_angle_to_rigid (Row, Column, textOrientationAngle, Row, Column, 0, HomMat2D) 15 | affine_trans_image (origiImage, ImageAffineTrans, HomMat2D, 'constant', 'false') 16 | *识别点状文字 17 | dots_image (ImageAffineTrans, DotImage, 5, 'dark', 0) 18 | *自动阈值分割 19 | binary_threshold (DotImage, Region, 'max_separability', 'light', UsedThreshold) 20 | *膨胀 21 | dilation_rectangle1 (Region, RegionDilation, 10, 10) 22 | *断开链接 23 | connection (RegionDilation, ConnectedRegions) 24 | *特征值筛选 25 | select_shape (ConnectedRegions, SelectedRegions, 'height', 'and', 38.99, 100.46) 26 | *交集 27 | intersection (SelectedRegions, Region, RegionIntersection) 28 | *排序 29 | sort_region (RegionIntersection, SortedRegions, 'character', 'true', 'row') 30 | *读取ocr mlp分类器 31 | read_ocr_class_mlp ('DotPrint_Rej.omc', OCRHandle) 32 | *使用分类器获得 33 | invert_image (DotImage, ImageInvert) 34 | do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence) 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /OCR文字识别_神经网络训练/点状字母数字识别_text_model.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | read_image (origiImage, 'C:/Users/Public/Documents/MVTec/HALCON-18.11-Progress/examples/images/ocr/dot_print_03.png') 8 | gen_rectangle1 (ROI_0, 112, 36, 420, 576) 9 | text_line_orientation (ROI_0, origiImage, 25, -0.523599, 0.523599, OrientationAngle) 10 | area_center (ROI_0, Area, Row, Column) 11 | vector_angle_to_rigid (Row, Column, OrientationAngle, Row, Column, 0, HomMat2D) 12 | affine_trans_image (origiImage, ImageAffineTrans, HomMat2D, 'constant', 'false') 13 | *创建文字读取model 14 | create_text_model_reader ('auto', 'DotPrint_Rej.omc', TextModel) 15 | *设置为读取点状文字 16 | set_text_model_param (TextModel, 'dot_print', 'true') 17 | *查找 18 | find_text (ImageAffineTrans, TextModel, TextResultID) 19 | *获得项 20 | get_text_object (Characters, TextResultID, 'all_lines') 21 | *获得结果 22 | get_text_result (TextResultID, 'num_lines', lineNum) 23 | get_text_result (TextResultID, 'class', ResultValue) 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /OCR文字识别_神经网络训练/环形文字识别.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-18.11-Progress/examples/images/circular_barcode.png') 7 | *旋转到字在左边(也可以不旋转,指定极坐标转换的弧度坐标) 8 | rotate_image (Image, ImageRotate, 180, 'constant') 9 | *阈值分割 10 | threshold (ImageRotate, Regions, 0, 96) 11 | *断开链接 12 | connection (Regions, ConnectedRegions) 13 | *选择目标区域环 14 | select_shape (ConnectedRegions, SelectedRegions, ['width','height'], 'and', [600.19,401.67], [1000,1000]) 15 | *找到外接圆 16 | * shape_trans (SelectedRegions, RegionTrans, 'outer_circle') 17 | smallest_circle (SelectedRegions, Row, Column, outRadius) 18 | *求补集得到内接圆 19 | complement (SelectedRegions, RegionComplement) 20 | *获得内接圆 21 | connection (RegionComplement, ConnectedRegions1) 22 | select_shape (ConnectedRegions1, SelectedRegions1, 'width', 'and', 384.04, 996.29) 23 | smallest_circle (SelectedRegions1, Row1, Column1, inRadius) 24 | *极坐标转换 25 | barWidth:=1600 26 | barHeight:=outRadius-inRadius-10 27 | polar_trans_image_ext (ImageRotate, PolarTransImage, Row, Column, rad(360), 0, outRadius-10, inRadius+10, barWidth, barHeight, 'nearest_neighbor') 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /OCR文字识别_神经网络训练/罗超书.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/OCR文字识别_神经网络训练/罗超书.jpg -------------------------------------------------------------------------------- /OCR文字识别_神经网络训练/罗超书字体识别_使用创建的mlp神经分类器.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | 8 | *分割图像 9 | *读取原图 10 | read_image (originalImage, 'E:/practice/halcon/HalconAlgorithm/OCR文字识别_神经网络训练/罗超书.jpg') 11 | *根据图像打开对应的窗口 12 | dev_open_window_fit_image (originalImage, 0, 0, -1, -1, WindowHandle) 13 | *转换为灰度图 14 | rgb1_to_gray (originalImage, GrayImage) 15 | *图像进行灰度缩放预处理 16 | scale_image (GrayImage, ImageScaled, 15.9375, -1371) 17 | *阈值分割 18 | threshold (ImageScaled, Regions, 0, 52) 19 | *分离连接件 20 | connection (Regions, ConnectedRegions) 21 | *特征筛选 22 | select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 311.72, 10000) 23 | *联合筛选出来的字 24 | union1 (SelectedRegions, RegionUnion) 25 | *拟合矩阵 26 | shape_trans (RegionUnion, rectangleTrans, 'rectangle2') 27 | *求取矩形的偏转角度 28 | orientation_region (rectangleTrans, Phi) 29 | *求取矩形的row/column 30 | area_center (rectangleTrans, Area, Row, Column) 31 | *根据矩形的偏转角度、row、column计算仿射的变换矩阵 32 | vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D) 33 | *根据放射矩阵变换 34 | affine_trans_region (rectangleTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor') 35 | affine_trans_image (originalImage, ImageAffineTrans, HomMat2D, 'constant', 'false') 36 | *裁剪目标区域 37 | reduce_domain (ImageAffineTrans,RegionAffineTrans, ImageReduced) 38 | *找到文字的几个区域 39 | rgb1_to_gray (ImageReduced, GrayImage1) 40 | threshold (GrayImage1, Regions1, 0, 89) 41 | connection (Regions1, ConnectedRegions1) 42 | select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 311.72, 1000) 43 | sort_region (SelectedRegions1, SortedRegions, 'first_point', 'true', 'column') 44 | 45 | *调用训练好的神经网络分类器进行识别 46 | read_ocr_class_mlp ('D:/wordTrain.omc',OCRHandle) 47 | do_ocr_multi_class_mlp (SortedRegions, ImageAffineTrans, OCRHandle, Class, Confidence) 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /OCR文字识别_神经网络训练/罗超书字体识别_创建mlp神经分类器.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | 8 | *分割图像 9 | *读取原图 10 | read_image (originalImage, 'E:/practice/halcon/HalconAlgorithm/OCR文字识别_神经网络训练/罗超书.jpg') 11 | *根据图像打开对应的窗口 12 | dev_open_window_fit_image (originalImage, 0, 0, -1, -1, WindowHandle) 13 | *转换为灰度图 14 | rgb1_to_gray (originalImage, GrayImage) 15 | *图像进行灰度缩放预处理 16 | scale_image (GrayImage, ImageScaled, 15.9375, -1371) 17 | *阈值分割 18 | threshold (ImageScaled, Regions, 0, 52) 19 | *分离连接件 20 | connection (Regions, ConnectedRegions) 21 | *特征筛选 22 | select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 311.72, 10000) 23 | *联合筛选出来的字 24 | union1 (SelectedRegions, RegionUnion) 25 | *拟合矩阵 26 | shape_trans (RegionUnion, rectangleTrans, 'rectangle2') 27 | *求取矩形的偏转角度 28 | orientation_region (rectangleTrans, Phi) 29 | *求取矩形的row/column 30 | area_center (rectangleTrans, Area, Row, Column) 31 | *根据矩形的偏转角度、row、column计算仿射的变换矩阵 32 | vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D) 33 | *根据放射矩阵变换 34 | affine_trans_region (rectangleTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor') 35 | affine_trans_image (originalImage, ImageAffineTrans, HomMat2D, 'constant', 'false') 36 | *裁剪目标区域 37 | reduce_domain (ImageAffineTrans,RegionAffineTrans, ImageReduced) 38 | *取得目标区域的字 39 | rgb1_to_gray (ImageReduced, roiGrayImage) 40 | * threshold (roiGrayImage, Regions1, 0, 73) 41 | threshold (roiGrayImage, Regions1, 0, 79) 42 | connection (Regions1, ConnectedRegions1) 43 | select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 311.72, 1000) 44 | sort_region (SelectedRegions1, SortedRegions, 'first_point', 'true', 'column') 45 | 46 | *神经网络训练 47 | 48 | *训练文件生成 49 | *创建训练文件路径 50 | trainFile:='D:/wordTrain.trf' 51 | *写入训练文件 52 | words:=['编','著','罗','超'] 53 | write_ocr_trainf (SortedRegions, roiGrayImage, words, trainFile) 54 | 55 | *进行训练并生成模板文件 56 | *创建模板文件路径 57 | fontPattern:='D:/wordTrain.omc' 58 | *创建神经网络分类器 59 | create_ocr_class_mlp (10, 30, 'constant', 'default', words, 80, 'none', 10, 42, OCRHandle) 60 | *用训练文件对分类器进行训练 61 | trainf_ocr_class_mlp (OCRHandle, trainFile, 200, 1, 0.01, Error, ErrorLog) 62 | *保存训练好的模板文件 63 | write_ocr_class_mlp (OCRHandle, fontPattern) 64 | *清理神经网络分类器句柄 65 | clear_ocr_class_mlp (OCRHandle) 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/HalconAlgoTest.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.28307.1209 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HalconAlgoTest", "src\HalconAlgoTest\HalconAlgoTest.vcxproj", "{B12702AD-ABFB-343A-A199-8E24837244A3}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HalconDeepLearning", "..\HalconDeepLearning\HalconDeepLearning.vcxproj", "{9A7F4BC9-A8CC-4355-98B7-8B93EABBC0C6}" 9 | EndProject 10 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LensCheckAlgorithm", "..\..\..\..\..\work\BYD\chenweizhen\LensMonitor\src\LensCheckAlgorithm\LensCheckAlgorithm.vcxproj", "{F46ABE46-979D-4A36-8242-351B2B8A9EFC}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|x64 = Debug|x64 15 | Release|x64 = Release|x64 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.ActiveCfg = Debug|x64 19 | {B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.Build.0 = Debug|x64 20 | {B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.ActiveCfg = Release|x64 21 | {B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.Build.0 = Release|x64 22 | {9A7F4BC9-A8CC-4355-98B7-8B93EABBC0C6}.Debug|x64.ActiveCfg = Debug|x64 23 | {9A7F4BC9-A8CC-4355-98B7-8B93EABBC0C6}.Debug|x64.Build.0 = Debug|x64 24 | {9A7F4BC9-A8CC-4355-98B7-8B93EABBC0C6}.Release|x64.ActiveCfg = Release|x64 25 | {9A7F4BC9-A8CC-4355-98B7-8B93EABBC0C6}.Release|x64.Build.0 = Release|x64 26 | {F46ABE46-979D-4A36-8242-351B2B8A9EFC}.Debug|x64.ActiveCfg = Debug|x64 27 | {F46ABE46-979D-4A36-8242-351B2B8A9EFC}.Debug|x64.Build.0 = Debug|x64 28 | {F46ABE46-979D-4A36-8242-351B2B8A9EFC}.Release|x64.ActiveCfg = Release|x64 29 | {F46ABE46-979D-4A36-8242-351B2B8A9EFC}.Release|x64.Build.0 = Release|x64 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | GlobalSection(ExtensibilityGlobals) = postSolution 35 | SolutionGuid = {46473382-1A95-4944-A5D4-62660563BC3B} 36 | EndGlobalSection 37 | EndGlobal 38 | -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/include/HalconDeepLearning/HalconDeepLearning.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconAlgoTest_使用HalconWindow/include/HalconDeepLearning/HalconDeepLearning.h -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/include/HalconDeepLearning/halcondeeplearning_global.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #ifndef BUILD_STATIC 6 | # if defined(HALCONDEEPLEARNING_LIB) 7 | # define HALCONDEEPLEARNING_EXPORT Q_DECL_EXPORT 8 | # else 9 | # define HALCONDEEPLEARNING_EXPORT Q_DECL_IMPORT 10 | # endif 11 | #else 12 | # define HALCONDEEPLEARNING_EXPORT 13 | #endif 14 | -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/lib/HalconDeepLearning.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconAlgoTest_使用HalconWindow/lib/HalconDeepLearning.lib -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/lib/HalconDeepLearningd.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconAlgoTest_使用HalconWindow/lib/HalconDeepLearningd.lib -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/lib/LensCheckAlgorithm.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconAlgoTest_使用HalconWindow/lib/LensCheckAlgorithm.lib -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/src/HalconAlgoTest/HalconAlgoTest.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconAlgoTest_使用HalconWindow/src/HalconAlgoTest/HalconAlgoTest.cpp -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/src/HalconAlgoTest/HalconAlgoTest.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "ui_HalconAlgoTest.h" 5 | #include "HalconAlgorithm.h" 6 | 7 | class LensCheckAlgorithm; 8 | 9 | class HalconAlgoTest : public QMainWindow 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | HalconAlgoTest(QWidget *parent = Q_NULLPTR); 15 | 16 | private: 17 | Ui::HalconAlgoTestClass ui; 18 | LensCheckAlgorithm& algorithm_; 19 | HTuple winHandle; 20 | 21 | private slots: 22 | void on_btnClicked_clicked(); 23 | }; 24 | -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/src/HalconAlgoTest/HalconAlgoTest.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/src/HalconAlgoTest/HalconAlgoTest.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | HalconAlgoTestClass 4 | 5 | 6 | 7 | 0 8 | 0 9 | 944 10 | 829 11 | 12 | 13 | 14 | HalconAlgoTest 15 | 16 | 17 | 18 | 19 | 20 | 590 21 | 50 22 | 141 23 | 51 24 | 25 | 26 | 27 | 点击分析图片 28 | 29 | 30 | 31 | 32 | 33 | 10 34 | 0 35 | 791 36 | 41 37 | 38 | 39 | 40 | E:\practice\halcon\Qt\temp\temp\NGImg\ 41 | 42 | 43 | 44 | 45 | 46 | 10 47 | 50 48 | 571 49 | 331 50 | 51 | 52 | 53 | 54 | 55 | 56 | 590 57 | 110 58 | 341 59 | 651 60 | 61 | 62 | 63 | 64 | 65 | 66 | 10 67 | 380 68 | 571 69 | 381 70 | 71 | 72 | 73 | Image 74 | 75 | 76 | 77 | 78 | 79 | 80 | 0 81 | 0 82 | 944 83 | 26 84 | 85 | 86 | 87 | 88 | 89 | TopToolBarArea 90 | 91 | 92 | false 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/src/HalconAlgoTest/HalconAlgoTest.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E} 14 | qrc;* 15 | false 16 | 17 | 18 | {99349809-55BA-4b9d-BF79-8FDBB0286EB3} 19 | ui 20 | 21 | 22 | {D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E} 23 | qrc;* 24 | false 25 | 26 | 27 | {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} 28 | moc;h;cpp 29 | False 30 | 31 | 32 | 33 | 34 | Source Files 35 | 36 | 37 | Source Files 38 | 39 | 40 | 41 | 42 | Header Files 43 | 44 | 45 | 46 | 47 | Form Files 48 | 49 | 50 | 51 | 52 | Resource Files 53 | 54 | 55 | -------------------------------------------------------------------------------- /Qt/HalconAlgoTest_使用HalconWindow/src/HalconAlgoTest/main.cpp: -------------------------------------------------------------------------------- 1 | #include "HalconAlgoTest.h" 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | HalconAlgoTest w; 8 | w.show(); 9 | return a.exec(); 10 | } 11 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/HalconAlgoTest.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.28307.1209 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HalconAlgoTest", "src\HalconAlgoTest\HalconAlgoTest.vcxproj", "{B12702AD-ABFB-343A-A199-8E24837244A3}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HalconDeepLearning", "src\HalconDeepLearning\HalconDeepLearning.vcxproj", "{9A7F4BC9-A8CC-4355-98B7-8B93EABBC0C6}" 9 | EndProject 10 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LensCheckAlgorithm", "src\LensCheckAlgorithm\LensCheckAlgorithm.vcxproj", "{F46ABE46-979D-4A36-8242-351B2B8A9EFC}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|x64 = Debug|x64 15 | Release|x64 = Release|x64 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.ActiveCfg = Debug|x64 19 | {B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.Build.0 = Debug|x64 20 | {B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.ActiveCfg = Release|x64 21 | {B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.Build.0 = Release|x64 22 | {9A7F4BC9-A8CC-4355-98B7-8B93EABBC0C6}.Debug|x64.ActiveCfg = Debug|x64 23 | {9A7F4BC9-A8CC-4355-98B7-8B93EABBC0C6}.Debug|x64.Build.0 = Debug|x64 24 | {9A7F4BC9-A8CC-4355-98B7-8B93EABBC0C6}.Release|x64.ActiveCfg = Release|x64 25 | {9A7F4BC9-A8CC-4355-98B7-8B93EABBC0C6}.Release|x64.Build.0 = Release|x64 26 | {F46ABE46-979D-4A36-8242-351B2B8A9EFC}.Debug|x64.ActiveCfg = Debug|x64 27 | {F46ABE46-979D-4A36-8242-351B2B8A9EFC}.Debug|x64.Build.0 = Debug|x64 28 | {F46ABE46-979D-4A36-8242-351B2B8A9EFC}.Release|x64.ActiveCfg = Release|x64 29 | {F46ABE46-979D-4A36-8242-351B2B8A9EFC}.Release|x64.Build.0 = Release|x64 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | GlobalSection(ExtensibilityGlobals) = postSolution 35 | SolutionGuid = {46473382-1A95-4944-A5D4-62660563BC3B} 36 | EndGlobalSection 37 | EndGlobal 38 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/include/HalconDeepLearning/HalconDeepLearning.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconDeepLearningTest/include/HalconDeepLearning/HalconDeepLearning.h -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/include/HalconDeepLearning/halcondeeplearning_global.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #ifndef BUILD_STATIC 6 | # if defined(HALCONDEEPLEARNING_LIB) 7 | # define HALCONDEEPLEARNING_EXPORT Q_DECL_EXPORT 8 | # else 9 | # define HALCONDEEPLEARNING_EXPORT Q_DECL_IMPORT 10 | # endif 11 | #else 12 | # define HALCONDEEPLEARNING_EXPORT 13 | #endif 14 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/lib/HalconDeepLearningd.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconDeepLearningTest/lib/HalconDeepLearningd.lib -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/lib/LensCheckAlgorithmd.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconDeepLearningTest/lib/LensCheckAlgorithmd.lib -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconAlgoTest/HalconAlgoTest.cpp: -------------------------------------------------------------------------------- 1 | #include "HalconAlgoTest.h" 2 | #include 3 | #include 4 | #include 5 | #include "LensCheckAlgorithm.h" 6 | using namespace HalconCpp; 7 | 8 | HalconAlgoTest::HalconAlgoTest(QWidget *parent) 9 | : QMainWindow(parent),\ 10 | algorithm_(LensCheckAlgorithm::globalInstance()) 11 | { 12 | ui.setupUi(this); 13 | auto id{ static_cast(ui.halconWindow->winId()) }; 14 | auto w{ ui.halconWindow->width() }; 15 | auto h{ ui.halconWindow->height() }; 16 | OpenWindow(0, 0, w, h, id, "visible", "", &winHandle_); 17 | HDevWindowStack::Push(winHandle_); 18 | } 19 | 20 | HalconAlgoTest::~HalconAlgoTest() 21 | { 22 | 23 | } 24 | 25 | void HalconAlgoTest::on_btnClicked_clicked() 26 | { 27 | static int i{ 0 }; 28 | auto path{ ui.editFilePath->text() }; 29 | if (i == 58) { 30 | i = 0; 31 | ui.text->appendPlainText("***finish***"); 32 | } 33 | path += QString("%1.jpg").arg(i++); 34 | algorithm_.setTestRingImage(path); 35 | auto img{ algorithm_.getHalconRingImg() }; 36 | HTuple w, h; 37 | GetImageSize(*img, &w, &h); 38 | SetPart(winHandle_, 0, 0, h, w); 39 | DispObj(*img,HDevWindowStack::GetActive()); 40 | 41 | 42 | QTime time; 43 | time.start(); 44 | QStringList lacks{ algorithm_.ringCheck() }; 45 | auto val{ time.elapsed() }; 46 | ui.text->appendPlainText(lacks.join(',') + QString{" %1"}.arg(val)); 47 | qDebug() << lacks; 48 | } 49 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconAlgoTest/HalconAlgoTest.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "HalconCpp.h" 4 | #include "ui_HalconAlgoTest.h" 5 | 6 | class LensCheckAlgorithm; 7 | 8 | namespace Ui { class HalconAlgoTestClass; } 9 | 10 | class HalconAlgoTest:public QMainWindow 11 | { 12 | Q_OBJECT 13 | 14 | public: 15 | HalconAlgoTest(QWidget *parent = nullptr); 16 | ~HalconAlgoTest(); 17 | 18 | private: 19 | Ui::HalconAlgoTestClass ui; 20 | 21 | LensCheckAlgorithm &algorithm_; 22 | HalconCpp::HTuple winHandle_; 23 | 24 | public slots: 25 | void on_btnClicked_clicked(); 26 | }; -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconAlgoTest/HalconAlgoTest.qrc: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconAlgoTest/HalconAlgoTest.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | HalconAlgoTestClass 4 | 5 | 6 | 7 | 0 8 | 0 9 | 944 10 | 518 11 | 12 | 13 | 14 | HalconAlgoTest 15 | 16 | 17 | 18 | 19 | 20 | 590 21 | 50 22 | 141 23 | 51 24 | 25 | 26 | 27 | 点击分析图片 28 | 29 | 30 | 31 | 32 | 33 | 10 34 | 0 35 | 791 36 | 41 37 | 38 | 39 | 40 | E:\practice\halcon\preLensVisionCheck\temp\NGImg\ 41 | 42 | 43 | 44 | 45 | 46 | 10 47 | 50 48 | 571 49 | 401 50 | 51 | 52 | 53 | 54 | 55 | 56 | 590 57 | 110 58 | 341 59 | 341 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 0 68 | 0 69 | 944 70 | 23 71 | 72 | 73 | 74 | 75 | 76 | TopToolBarArea 77 | 78 | 79 | false 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconAlgoTest/HalconAlgoTest.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | true 8 | 9 | 10 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 11 | h;hh;hpp;hxx;hm;inl;inc;xsd 12 | true 13 | 14 | 15 | {99349809-55BA-4b9d-BF79-8FDBB0286EB3} 16 | ui 17 | true 18 | 19 | 20 | {D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E} 21 | qrc;* 22 | false 23 | 24 | 25 | 26 | 27 | Source Files 28 | 29 | 30 | Source Files 31 | 32 | 33 | 34 | 35 | Form Files 36 | 37 | 38 | 39 | 40 | Resource Files 41 | 42 | 43 | 44 | 45 | Header Files 46 | 47 | 48 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconAlgoTest/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include"HalconAlgoTest.h" 3 | 4 | int main(int argc,char**argv) 5 | { 6 | QApplication a(argc,argv); 7 | 8 | HalconAlgoTest w; 9 | w.show(); 10 | 11 | return a.exec(); 12 | } -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconDeepLearning/HalconDeepLearning.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconDeepLearningTest/src/HalconDeepLearning/HalconDeepLearning.cpp -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconDeepLearning/HalconDeepLearning.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconDeepLearningTest/src/HalconDeepLearning/HalconDeepLearning.h -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconDeepLearning/HalconDeepLearning.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E} 14 | qrc;* 15 | false 16 | 17 | 18 | {D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E} 19 | qrc;* 20 | false 21 | 22 | 23 | {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} 24 | moc;h;cpp 25 | False 26 | 27 | 28 | 29 | 30 | Source Files 31 | 32 | 33 | Source Files 34 | 35 | 36 | 37 | 38 | Header Files 39 | 40 | 41 | 42 | 43 | Header Files 44 | 45 | 46 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconDeepLearning/halconAlgorithm.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconDeepLearningTest/src/HalconDeepLearning/halconAlgorithm.cpp -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/HalconDeepLearning/halcondeeplearning_global.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #ifndef BUILD_STATIC 6 | # if defined(HALCONDEEPLEARNING_LIB) 7 | # define HALCONDEEPLEARNING_EXPORT Q_DECL_EXPORT 8 | # else 9 | # define HALCONDEEPLEARNING_EXPORT Q_DECL_IMPORT 10 | # endif 11 | #else 12 | # define HALCONDEEPLEARNING_EXPORT 13 | #endif 14 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/HalconAlgorithm.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | # include "HalconCpp.h" 3 | # include "HDevThread.h" 4 | using namespace HalconCpp; 5 | 6 | 7 | extern void lensImgCheck(HObject ho_Image, HTuple hv_DLModelHandle, HTuple hv_DLPreprocessParam, 8 | HTuple *hv_lacks); -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/LensCheckAlgorithm.cpp: -------------------------------------------------------------------------------- 1 | #pragma execution_character_set("utf-8") 2 | #include "LensCheckAlgorithm.h" 3 | #include 4 | #include 5 | #include "HalconAlgorithm.h" 6 | #include "LensCheckAlgorithmPrivate.h" 7 | 8 | 9 | 10 | LensCheckAlgorithm& LensCheckAlgorithm::globalInstance() 11 | { 12 | static LensCheckAlgorithm algorithm; 13 | return algorithm; 14 | } 15 | 16 | LensCheckAlgorithm::LensCheckAlgorithm(QObject *parent /*= Q_NULLPTR*/) 17 | :QObject(parent),\ 18 | data_(nullptr) 19 | { 20 | data_ = new LensCheckAlgorithmPrivate(this); 21 | } 22 | 23 | LensCheckAlgorithm::~LensCheckAlgorithm() 24 | { 25 | 26 | } 27 | 28 | void LensCheckAlgorithm::setRingImage(QSharedPointer image) 29 | { 30 | data_->setRingImage(image); 31 | } 32 | 33 | void LensCheckAlgorithm::setBackImage(QSharedPointer image) 34 | { 35 | data_->setBackImage(image); 36 | } 37 | 38 | QImage LensCheckAlgorithm::getRingImg() 39 | { 40 | return data_->getRingImg(); 41 | } 42 | 43 | QSharedPointer LensCheckAlgorithm::getHalconRingImg() 44 | { 45 | return data_->getHalconRingImg(); 46 | } 47 | 48 | QImage LensCheckAlgorithm::getBackImg() 49 | { 50 | return data_->getBackImg(); 51 | } 52 | 53 | QList LensCheckAlgorithm::ringCheck() 54 | { 55 | return data_->ringCheck(); 56 | } 57 | 58 | void LensCheckAlgorithm::setTestRingImage(const QString& filePath) 59 | { 60 | data_->setTestRingImage(filePath); 61 | } 62 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/LensCheckAlgorithm.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/LensCheckAlgorithm.h -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/LensCheckAlgorithm.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E} 14 | qrc;* 15 | false 16 | 17 | 18 | {D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E} 19 | qrc;* 20 | false 21 | 22 | 23 | {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} 24 | moc;h;cpp 25 | False 26 | 27 | 28 | 29 | 30 | Source Files 31 | 32 | 33 | Source Files 34 | 35 | 36 | Source Files 37 | 38 | 39 | 40 | 41 | Header Files 42 | 43 | 44 | Header Files 45 | 46 | 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/LensCheckAlgorithmPrivate.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/LensCheckAlgorithmPrivate.cpp -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/LensCheckAlgorithmPrivate.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/LensCheckAlgorithmPrivate.h -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/algorithm/halconLensCheck.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/algorithm/halconLensCheck.cpp -------------------------------------------------------------------------------- /Qt/HalconDeepLearningTest/src/LensCheckAlgorithm/lenscheckalgorithm_global.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #ifndef BUILD_STATIC 6 | # if defined(LENSCHECKALGORITHM_LIB) 7 | # define LENSCHECKALGORITHM_EXPORT Q_DECL_EXPORT 8 | # else 9 | # define LENSCHECKALGORITHM_EXPORT Q_DECL_IMPORT 10 | # endif 11 | #else 12 | # define LENSCHECKALGORITHM_EXPORT 13 | #endif 14 | -------------------------------------------------------------------------------- /Qt/Matching/main.cpp: -------------------------------------------------------------------------------- 1 | // HALCON/Qt pattern matching and measure example 2 | // 3 | // (c) 2004-2020 MVTec Software GmbH 4 | 5 | // main.cpp : Initialization of the Qt application 6 | // 7 | 8 | #include "matching.h" 9 | 10 | #include 11 | 12 | #ifdef Q_WS_X11 13 | #include 14 | #endif 15 | 16 | int main(int argc, char **argv) 17 | { 18 | #ifdef Q_WS_X11 19 | XInitThreads(); 20 | #endif 21 | QApplication application(argc,argv); 22 | 23 | try 24 | { 25 | Matching w; 26 | w.resize(QSize(700, 500)); 27 | w.setWindowTitle("Matching and Measurement Demo"); 28 | w.InitFg(); 29 | w.show(); 30 | return application.exec(); 31 | } 32 | catch (HalconCpp::HException &exception) 33 | { 34 | fprintf(stderr, "Error #%u: %s\n", 35 | exception.ErrorCode(), exception.ErrorMessage().TextA()); 36 | exit(-1); 37 | } 38 | 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /Qt/Matching/matching.h: -------------------------------------------------------------------------------- 1 | // HALCON/Qt pattern matching and measure example 2 | // 3 | // (c) 2004-2020 MVTec Software GmbH 4 | 5 | // matching.h : Definition of the class Matching 6 | // 7 | 8 | #if QT_VERSION >= 0x050000 9 | #include 10 | #include 11 | #else 12 | #include 13 | #include 14 | #endif 15 | 16 | #include 17 | 18 | #include "qhalconwindow.h" 19 | 20 | class Matching: public QWidget 21 | { 22 | Q_OBJECT 23 | 24 | public: 25 | Matching(QWidget *parent=0); 26 | virtual ~Matching(void); 27 | void InitFg(void); 28 | 29 | protected slots: 30 | void Create(void); 31 | void Start(void); 32 | void Stop(void); 33 | 34 | protected: 35 | void timerEvent(QTimerEvent*); 36 | void StartMatching(void); 37 | 38 | private: 39 | // HALCON variables 40 | Hlong ImageWidth, ImageHeight; 41 | HalconCpp::HTuple FGHandle; 42 | HalconCpp::HImage Image; 43 | QScopedPointer ShapeModel; 44 | HalconCpp::HTuple ModelRow, ModelColumn; 45 | HalconCpp::HTuple Rect1Row, Rect1Col, Rect2Row, Rect2Col; 46 | HalconCpp::HTuple RectLength1, RectLength2; 47 | HalconCpp::HObject ShapeModelRegion; 48 | 49 | // GUI elements 50 | QLabel *MatchTimeLabel, *MatchScoreLabel, *MeasTimeLabel; 51 | QLabel *NumLeadsLabel, *MinLeadsDistLabel; 52 | QPushButton *CreateButton, *StartButton, *StopButton; 53 | QHalconWindow *Disp; 54 | 55 | // Timer 56 | long Timer; 57 | }; 58 | -------------------------------------------------------------------------------- /Qt/Matching/matching.pro: -------------------------------------------------------------------------------- 1 | # HALCON/Qt pattern matching and measure example 2 | # 3 | # (c) 2004-2020 MVTec Software GmbH 4 | 5 | # matching.pro 6 | # 7 | 8 | CONFIG += qt debug 9 | QT += core gui widgets 10 | 11 | # MacOS specific settings. Note that while dyld will search under 12 | # /Library/Frameworks by default, the preprocessor/compiler/linker will not 13 | # and need to be told explicitly. 14 | macx { 15 | QMAKE_CXXFLAGS += -F/Library/Frameworks 16 | QMAKE_LFLAGS += -F/Library/Frameworks 17 | LIBS += -framework HALCONCpp 18 | } 19 | else { 20 | #defines 21 | win32:DEFINES += WIN32 22 | 23 | #includes 24 | INCLUDEPATH += "$$(HALCONROOT)/include" 25 | INCLUDEPATH += "$$(HALCONROOT)/include/halconcpp" 26 | 27 | #libs 28 | QMAKE_LIBDIR += "$$(HALCONROOT)/lib/$$(HALCONARCH)" 29 | unix:LIBS += -lhalconcpp -lhalcon -lXext -lX11 -ldl -lpthread 30 | win32:LIBS += "$$(HALCONROOT)/lib/$$(HALCONARCH)/halconcpp.lib" \ 31 | "$$(HALCONROOT)/lib/$$(HALCONARCH)/halcon.lib" 32 | } 33 | 34 | #sources 35 | HEADERS += qhalconwindow.h 36 | HEADERS += matching.h 37 | SOURCES += qhalconwindow.cpp 38 | SOURCES += matching.cpp 39 | SOURCES += main.cpp 40 | -------------------------------------------------------------------------------- /Qt/Matching/qhalconwindow.cpp: -------------------------------------------------------------------------------- 1 | // HALCON/Qt pattern matching and measure example 2 | // 3 | // (c) 2004-2020 MVTec Software GmbH 4 | 5 | // QHalconWindow.cpp : Implementation of the class QHalconWindow 6 | // 7 | #include 8 | #include 9 | 10 | #include "qhalconwindow.h" 11 | 12 | #include 13 | 14 | Herror __stdcall ContentUpdateCallback(void *context) 15 | { 16 | // this callback gets calls on flush_buffer 17 | // if auto flushing is enabled (default) it gets called after every 18 | // change to the graphics buffer 19 | QHalconWindow* hwindow = (QHalconWindow*)context; 20 | 21 | // schedule redraw in Qt thread 22 | hwindow->update(); 23 | 24 | return H_MSG_OK; 25 | } 26 | 27 | QHalconWindow::QHalconWindow(QWidget *parent, long Width, long Height) 28 | : QWidget(parent), lastMousePos(-1, -1) 29 | { 30 | show(); 31 | resize(Width,Height); 32 | 33 | // initialize HALCON buffer window 34 | halconBuffer.reset(new HalconCpp::HWindow(0, 0, 100, 100, 0, "buffer", "")); 35 | // turn on graphics stack, so image and regions stay even after zooming or 36 | // resizing 37 | halconBuffer->SetWindowParam("graphics_stack", "true"); 38 | // turn on explicit flushing 39 | halconBuffer->SetWindowParam("flush", "false"); 40 | // register update callback 41 | halconBuffer->SetContentUpdateCallback((void*)&ContentUpdateCallback, this); 42 | } 43 | 44 | // Resize the HALCON window whenever the QHalconWindow widget is resized 45 | void QHalconWindow::resizeEvent(QResizeEvent* event) 46 | { 47 | Q_UNUSED(event); 48 | // Set the HALCON window to its new size. 49 | halconBuffer->SetWindowExtents(0,0,width(),height()); 50 | // initiate redraw of buffer. 51 | // (this uses the graphics_stack to get the last image and objects) 52 | halconBuffer->FlushBuffer(); 53 | } 54 | 55 | 56 | 57 | void QHalconWindow::paintEvent(QPaintEvent *event) 58 | { 59 | using namespace HalconCpp; 60 | Q_UNUSED(event); 61 | 62 | HString type; 63 | Hlong width, height; 64 | // get content of buffer 65 | HImage image = halconBuffer->DumpWindowImage(); 66 | // transform buffer to format used in Qt 67 | HImage imageInterleaved = image.InterleaveChannels("argb", "match", 0); 68 | // get access to raw image data 69 | unsigned char* pointer = (unsigned char*)imageInterleaved.GetImagePointer1(&type, &width, &height); 70 | // create QImage from data 71 | QImage qimage(pointer, width/4, height, QImage::Format_RGB32); 72 | 73 | // draw image to widget 74 | QPainter painter(this); 75 | painter.drawImage(QPoint(0, 0), qimage); 76 | } 77 | 78 | void QHalconWindow::GetPartFloat(double *row1, double *col1, double *row2, double *col2) 79 | { 80 | // to get float values from get_part, use HTuple parameters 81 | HalconCpp::HTuple trow1, tcol1, trow2, tcol2; 82 | halconBuffer->GetPart(&trow1, &tcol1, &trow2, &tcol2); 83 | *row1 = trow1.D(); 84 | *col1 = tcol1.D(); 85 | *row2 = trow2.D(); 86 | *col2 = tcol2.D(); 87 | } 88 | 89 | void QHalconWindow::SetPartFloat(double row1, double col1, double row2, double col2) 90 | { 91 | // convert the double values to HTuple. Otherwise the int variant of SetPart is used 92 | // this enables smooth movement and zooming even when zoomed in 93 | halconBuffer->SetPart(HalconCpp::HTuple(row1), HalconCpp::HTuple(col1), 94 | HalconCpp::HTuple(row2), HalconCpp::HTuple(col2)); 95 | } 96 | 97 | 98 | void QHalconWindow::mouseMoveEvent(QMouseEvent *event) 99 | { 100 | if ((event->buttons() == Qt::LeftButton) && lastMousePos.x() != -1) 101 | { 102 | QPoint delta = lastMousePos - event->globalPos(); 103 | 104 | // scale delta to image zooming factor 105 | double scalex = (lastCol2 - lastCol1 + 1) / (double)width(); 106 | double scaley = (lastRow2 - lastRow1 + 1) / (double)height(); 107 | try 108 | { 109 | // set new visible part 110 | SetPartFloat(lastRow1 + (delta.y() * scaley), 111 | lastCol1 + (delta.x() * scalex), 112 | lastRow2 + (delta.y() * scaley), 113 | lastCol2 + (delta.x() * scalex)); 114 | // initiate redraw () 115 | halconBuffer->FlushBuffer(); 116 | } 117 | catch (HalconCpp::HOperatorException) 118 | { 119 | // this may happen, if the part image is moved outside the window 120 | } 121 | } 122 | } 123 | 124 | void QHalconWindow::mousePressEvent(QMouseEvent *event) 125 | { 126 | // save last mouse position and image part 127 | GetPartFloat(&lastRow1, &lastCol1, &lastRow2, &lastCol2); 128 | lastMousePos = event->globalPos(); 129 | } 130 | 131 | void QHalconWindow::mouseReleaseEvent(QMouseEvent *event) 132 | { 133 | Q_UNUSED(event); 134 | // unset reference mouse position 135 | lastMousePos = QPoint(-1, -1); 136 | } 137 | 138 | void QHalconWindow::mouseDoubleClickEvent(QMouseEvent *event) 139 | { 140 | Q_UNUSED(event); 141 | if (event->buttons() == Qt::LeftButton) 142 | { 143 | // reset image part 144 | halconBuffer->SetPart(0, 0, -1, -1); 145 | halconBuffer->FlushBuffer(); 146 | } 147 | } 148 | 149 | void QHalconWindow::wheelEvent(QWheelEvent *event) 150 | { 151 | // event->delta() is a multiple of 120. For larger multiples, the user 152 | // rotated the wheel by multiple notches. 153 | int num_notch = std::abs(event->delta()) / 120; 154 | double factor = (event->delta() > 0) ? std::sqrt(2.0) : 1.0 / std::sqrt(2.0); 155 | while (num_notch > 1) 156 | { 157 | factor = factor * ((event->delta() > 0) ? std::sqrt(2.0) : 1.0 / std::sqrt(2.0)); 158 | num_notch--; 159 | } 160 | 161 | // get zooming center 162 | double centerRow, centerCol; 163 | halconBuffer->ConvertCoordinatesWindowToImage(event->y(), event->x(), ¢erRow, ¢erCol); 164 | // get current image part 165 | double row1, col1, row2, col2; 166 | GetPartFloat(&row1, &col1, &row2, &col2); 167 | // zoom around center 168 | double left = centerRow - row1; 169 | double right = row2 - centerRow; 170 | double top = centerCol - col1; 171 | double buttom = col2 - centerCol; 172 | double newRow1 = centerRow - left * factor; 173 | double newRow2 = centerRow + right * factor; 174 | double newCol1 = centerCol - top * factor; 175 | double newCol2 = centerCol + buttom * factor; 176 | try 177 | { 178 | SetPartFloat(newRow1, newCol1, newRow2, newCol2); 179 | halconBuffer->FlushBuffer(); 180 | } 181 | catch (HalconCpp::HOperatorException) 182 | { 183 | // this may happen, if the part is much too small or too big 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /Qt/Matching/qhalconwindow.h: -------------------------------------------------------------------------------- 1 | // HALCON/Qt pattern matching and measure example 2 | // 3 | // (c) 2004-2020 MVTec Software GmbH 4 | 5 | // QHalconWindow.h : Class used for opening HALCON windows in Qt 6 | // 7 | #ifndef QHALCONWINDOW_H 8 | #define QHALCONWINDOW_H 9 | 10 | #include 11 | #include 12 | #include 13 | 14 | #ifndef __APPLE__ 15 | # include "HalconCpp.h" 16 | #else 17 | # ifndef HC_LARGE_IMAGES 18 | # include 19 | # else 20 | # include 21 | # endif 22 | #endif 23 | 24 | class QHalconWindow: public QWidget 25 | { 26 | Q_OBJECT 27 | 28 | public: 29 | QHalconWindow(QWidget *parent=0, long Width=0, long Height=0); 30 | 31 | HalconCpp::HWindow* GetHalconBuffer(void) {return halconBuffer.data();} 32 | 33 | protected: 34 | void resizeEvent(QResizeEvent*); 35 | void paintEvent(QPaintEvent *event); 36 | void mouseMoveEvent(QMouseEvent *event); 37 | void mousePressEvent(QMouseEvent *event); 38 | void mouseReleaseEvent(QMouseEvent *event); 39 | void mouseDoubleClickEvent(QMouseEvent *event); 40 | void wheelEvent(QWheelEvent *event); 41 | 42 | private: 43 | void GetPartFloat(double *row1, double *col1, double *row2, double *col2); 44 | void SetPartFloat(double row1, double col1, double row2, double col2); 45 | QScopedPointer halconBuffer; 46 | QPoint lastMousePos; 47 | double lastRow1, lastCol1, lastRow2, lastCol2; 48 | }; 49 | 50 | #endif // !QHALCONWINDOW_H 51 | -------------------------------------------------------------------------------- /Qt/Matching/readme.txt: -------------------------------------------------------------------------------- 1 | # HALCON/Qt pattern matching and measure example 2 | # 3 | # (c) 2004-2020 MVTec Software GmbH 4 | # 5 | # README 6 | # 7 | 8 | - This example requires Qt version 4.8 or later (for MacOS, only version 4.8 9 | has been tested to work). 10 | 11 | - To generate the application take the following steps: 12 | 13 | 1. Check for the correct setting of the environment variables 14 | 'PATH','HALCONROOT', and 'HALCONARCH'. 15 | How to specify those environment variables is described in the 16 | Programmer's Guide (Section: Platform-Specific HALCON Versions) 17 | 18 | 2a. Generate Makefile: 19 | 20 | qmake -o Makefile matching.pro 21 | 22 | or simply: 23 | 24 | qmake 25 | 26 | b. Alternatively generate Visual Studio project file: 27 | 28 | qmake -tp vc 29 | 30 | or: qmake -t vcapp -o matching.dsp matching.pro 31 | 32 | 3a. Generate executable by calling make, nmake, gmake etc. 33 | 34 | b. Alternatively use the generated Visual Studio project file 35 | 36 | - Alternatively, Qt Creator can be used to build the application. 37 | To do that, load the matching.pro file to your Qt Creator then build it 38 | using the desired Qt version. 39 | 40 | - For MacOS X, take the following steps: 41 | 42 | 1a. Generate either a Makefile: 43 | 44 | qmake -spec macx-g++ matching.pro 45 | 46 | b. Alternatively generate a Xcode project: 47 | 48 | qmake -spec macx-xcode matching.pro 49 | 50 | Note that up until Qt 5.2.0, qmake has a bug where file paths that 51 | contain spaces are not quoted properly, so you may need to manually 52 | fix the 'Qt Qmake' and 'Qt Preprocessors' custom build phases in the 53 | generated Xcode project by putting the path to the example directory in 54 | single quotes in the shell command. 55 | 56 | 2. Generate executable by calling make or selecting 'Build' in Xcode. 57 | 58 | -------------------------------------------------------------------------------- /Qt/simpleCamera/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | 3 | project(SimpleCamera) 4 | 5 | if( MINGW ) 6 | if( CMAKE_BUILD_TYPE STREQUAL "Debug" ) 7 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++2a -O0 -g -Wall -Wunused-function -pthread") 8 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -g -pthread") 9 | message("MINGW - Debug mode") 10 | elseif( CMAKE_BUILD_TYPE STREQUAL "Release" ) # debug 11 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -pthread -Wunused-function") 12 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -O2 -pthread") 13 | message("MINGW - Release mode") 14 | endif() # Debug 15 | # 16 | if( PROJECT_ARCHITECTURE STREQUAL "x64" ) # x64 17 | set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") 18 | elseif(PROJECT_ARCHITECTURE STREQUAL "x86") # x86 19 | set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") 20 | endif() # x64 21 | #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} " ) 22 | set( CMAKE_EXECUTABLE_SUFFIX ".exe" ) 23 | endif() # MINGW 24 | 25 | if( APPLE ) 26 | if( CMAKE_BUILD_TYPE STREQUAL "Debug" ) 27 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O0 -g -Wall -Wunused-function -pthread") 28 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -g -pthread") 29 | message("CLANG - Debug mode") 30 | elseif( CMAKE_BUILD_TYPE STREQUAL "Release" ) # debug 31 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -pthread -Wunused-function") 32 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -O2 -pthread") 33 | message("CLANG - Release mode") 34 | endif() # Debug 35 | # 36 | if( PROJECT_ARCHITECTURE STREQUAL "x64" ) # x64 37 | set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") 38 | elseif(PROJECT_ARCHITECTURE STREQUAL "x86") # x86 39 | set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") 40 | endif() # x64 41 | #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} " ) 42 | endif() # CLANG 43 | 44 | # Microsoft Visual C++ Compilers 45 | if(MSVC) 46 | if( CMAKE_BUILD_TYPE STREQUAL "Debug" ) 47 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 48 | elseif(CMAKE_BUILD_TYPE STREQUAL "Release") 49 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast /Gy /Oi /Oy /O2 /Ot /Zi /EHsc ") 50 | endif() 51 | if(CMAKE_CL_64) 52 | set( PROJECT_ARCHITECTURE "x64" ) 53 | else(CMAKE_CL_64) 54 | set( PROJECT_ARCHITECTURE "x86" ) 55 | endif(CMAKE_CL_64) 56 | # 57 | ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) 58 | # 59 | set( CMAKE_EXECUTABLE_SUFFIX ".exe" ) 60 | endif() 61 | 62 | #设置输出路径 63 | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 64 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 65 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 66 | 67 | #设定库文件后缀名 68 | set(CMAKE_DEBUG_POSTFIX "d") 69 | 70 | #添加项目组件 71 | add_subdirectory(src) 72 | -------------------------------------------------------------------------------- /Qt/simpleCamera/src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | 3 | #加入公共头文件 4 | include_directories(${CMAKE_SOURCE_DIR}/include) 5 | 6 | #加入公共引用库 7 | link_directories(${CMAKE_SOURCE_DIR}/lib) 8 | 9 | #设置环境变量 10 | file(GLOB AllDlls ${CMAKE_SOURCE_DIR}/bin/*.dll) 11 | link_libraries(${AllDlls}) 12 | 13 | #添加组件 14 | add_subdirectory(MainUI) 15 | 16 | #设定Debug模式下的exe输出带有d后缀 17 | set_target_properties(MainUI PROPERTIES DEBUG_POSTFIX "d") -------------------------------------------------------------------------------- /Qt/simpleCamera/src/MainUI/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | 3 | project(MainUI LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | # QtCreator supports the following variables for Android, which are identical to qmake Android variables. 15 | # Check http://doc.qt.io/qt-5/deployment-android.html for more information. 16 | # They need to be set before the find_package(Qt5 ...) call. 17 | 18 | #if(ANDROID) 19 | # set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") 20 | # if (ANDROID_ABI STREQUAL "armeabi-v7a") 21 | # set(ANDROID_EXTRA_LIBS 22 | # ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so 23 | # ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so) 24 | # endif() 25 | #endif() 26 | 27 | 28 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED) 29 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED) 30 | 31 | #使用findpackage的方式加入halcon,这个方式用的很差 32 | #if(DEFINED ENV{HALCONROOT} AND NOT $ENV{HALCONROOT} STREQUAL "") 33 | # message("Using HALCONROOT " $ENV{HALCONROOT}) 34 | # STRING(REGEX REPLACE "\\\\" "/" HALCONROOT $ENV{HALCONROOT}) 35 | #endif() 36 | #set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) 37 | #find_package(Halcon REQUIRED) 38 | #find_package(HDevEngine REQUIRED) 39 | #include_directories(${HALCON_INC_DIRS}) 40 | #link_directories(${HALCON_LIBS}) 41 | 42 | #使用路径添加的方式jia'r加入halcon 43 | #加入halcon头文件路径 44 | include_directories($ENV{HALCONROOT}/include) 45 | #加入halcon lib依赖 46 | link_directories($ENV{HALCONROOT}/lib/$ENV{HALCONARCH}) 47 | 48 | 49 | file(GLOB Headers *.h) 50 | file(GLOB Cpps *.cpp) 51 | file(GLOB UIs *.ui) 52 | file(GLOB Src *.qrc) 53 | if(ANDROID) 54 | add_library(${PROJECT_NAME} SHARED 55 | ${Headers} 56 | ${Cpps} 57 | ${UIs} 58 | ${Src} 59 | ) 60 | else() 61 | add_executable(${PROJECT_NAME} 62 | ${Headers} 63 | ${Cpps} 64 | ${UIs} 65 | ${Src} 66 | ) 67 | endif() 68 | 69 | target_link_libraries(${PROJECT_NAME} PUBLIC halconcpp PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) 70 | -------------------------------------------------------------------------------- /Qt/simpleCamera/src/MainUI/main.cpp: -------------------------------------------------------------------------------- 1 | #include "mainui.h" 2 | 3 | #include 4 | 5 | int main(int argc, char *argv[]) 6 | { 7 | QApplication a(argc, argv); 8 | MainUI w; 9 | w.show(); 10 | return a.exec(); 11 | } 12 | -------------------------------------------------------------------------------- /Qt/simpleCamera/src/MainUI/mainui.cpp: -------------------------------------------------------------------------------- 1 | #pragma execution_character_set("utf-8") 2 | #include "mainui.h" 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include "./ui_mainui.h" 9 | #include "halconcpp/HalconCpp.h" 10 | using namespace HalconCpp; 11 | 12 | MainUI::MainUI(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainUI) { 13 | ui->setupUi(this); 14 | } 15 | 16 | MainUI::~MainUI() { delete ui; } 17 | 18 | void MainUI::on_btnStart_clicked() { 19 | // Local iconic variables 20 | HObject ho_baseImg, ho_img, ho_grayImg, ho_Region; 21 | HObject ho_RegionFillUp, ho_ConnectedRegions, ho_SelectedRegions; 22 | 23 | // Local control variables 24 | HTuple hv_AcqHandle, hv_w, hv_h, hv_WindowHandle; 25 | HTuple hv_Numb; 26 | 27 | //关闭窗口 28 | // if (HDevWindowStack::IsOpen()) CloseWindow(HDevWindowStack::Pop()); 29 | //打开相机,获得句柄 30 | OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, 31 | "false", "default", "0", -1, 1, &hv_AcqHandle); 32 | //捕捉一帧获得图像的大小 33 | GrabImage(&ho_baseImg, hv_AcqHandle); 34 | //获得图片的宽高 35 | GetImageSize(ho_baseImg, &hv_w, &hv_h); 36 | //新建窗口 37 | SetWindowAttr("background_color", "black"); 38 | OpenWindow(0, 0, hv_w, hv_h, static_cast(ui->halconWindow->winId()), 39 | "visible", "", &hv_WindowHandle); 40 | HDevWindowStack::Push(hv_WindowHandle); 41 | //采集图像并处理 42 | //启动预抓图 43 | GrabImageStart(hv_AcqHandle, -1); 44 | QTime time; 45 | while (0 != 1) { 46 | qApp->processEvents(); 47 | 48 | time.restart(); 49 | //开始异步抓图 50 | GrabImageAsync(&ho_img, hv_AcqHandle, -1); 51 | //显示图像,其实不要这个也显示了 52 | if (HDevWindowStack::IsOpen()) 53 | DispObj(ho_img, HDevWindowStack::GetActive()); 54 | 55 | //开始处理图像 56 | //转化为灰度图 57 | Rgb1ToGray(ho_img, &ho_grayImg); 58 | //阈值提取亮处 59 | Threshold(ho_grayImg, &ho_Region, 200, 255); 60 | //填充区域 61 | FillUp(ho_Region, &ho_RegionFillUp); 62 | //找到连接的区域 63 | Connection(ho_RegionFillUp, &ho_ConnectedRegions); 64 | //选出大面积的目标 65 | SelectShape(ho_ConnectedRegions, &ho_SelectedRegions, "area", "and", 500, 66 | 99999); 67 | if (HDevWindowStack::IsOpen()) { 68 | DispObj(ho_SelectedRegions, HDevWindowStack::GetActive()); 69 | } 70 | //计算目标的个数 71 | CountObj(ho_SelectedRegions, &hv_Numb); 72 | //设置显示文字颜色 73 | if (HDevWindowStack::IsOpen()) 74 | SetColor(HDevWindowStack::GetActive(), "white"); 75 | //设置文字位置 76 | SetTposition(hv_WindowHandle, 24, 12); 77 | //查询可以设置的字体 78 | // query_font (WindowHandle, Font) 79 | //设置字体 80 | SetFont(hv_WindowHandle, "default-24"); 81 | //设定输出文字 82 | // write_string会输出dev_set_color的颜色的字 83 | auto v{time.elapsed()}; 84 | WriteString(hv_WindowHandle, 85 | "有" + hv_Numb + "个特别亮的目标" + "fps:" + 1000 / v); 86 | // disp_message (WindowHandle, '有'+Numb+'个目标啊', 'window', 12, 12, 87 | // 'yellow', 'false') 设置目标颜色为多彩色(12) 88 | if (HDevWindowStack::IsOpen()) SetColored(HDevWindowStack::GetActive(), 12); 89 | 90 | //每次处理完毕后停止,也可以设置断点的 91 | // stop () 92 | } 93 | 94 | //采集结束,释放相机资源 95 | CloseFramegrabber(hv_AcqHandle); 96 | } 97 | -------------------------------------------------------------------------------- /Qt/simpleCamera/src/MainUI/mainui.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINUI_H 2 | #define MAINUI_H 3 | 4 | #include 5 | 6 | QT_BEGIN_NAMESPACE 7 | namespace Ui { 8 | class MainUI; 9 | } 10 | QT_END_NAMESPACE 11 | 12 | namespace HalconCpp { 13 | class HTuple; 14 | } 15 | 16 | class MainUI : public QMainWindow { 17 | Q_OBJECT 18 | 19 | public: 20 | MainUI(QWidget *parent = nullptr); 21 | ~MainUI(); 22 | 23 | private slots: 24 | void on_btnStart_clicked(); 25 | 26 | private: 27 | Ui::MainUI *ui; 28 | HalconCpp::HTuple *halConWindowHandle_; 29 | }; 30 | #endif // MAINUI_H 31 | -------------------------------------------------------------------------------- /Qt/simpleCamera/src/MainUI/mainui.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainUI 4 | 5 | 6 | 7 | 0 8 | 0 9 | 800 10 | 600 11 | 12 | 13 | 14 | MainUI 15 | 16 | 17 | 18 | 19 | 20 | 10 21 | 10 22 | 641 23 | 531 24 | 25 | 26 | 27 | 28 | 29 | 30 | 690 31 | 490 32 | 75 33 | 23 34 | 35 | 36 | 37 | 开始采集 38 | 39 | 40 | 41 | 42 | 43 | 690 44 | 520 45 | 75 46 | 23 47 | 48 | 49 | 50 | 停止采集 51 | 52 | 53 | 54 | 55 | 56 | 57 | 0 58 | 0 59 | 800 60 | 23 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /algorithm.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | gen_caltab (7, 7, 0.0125, 0.5, 'caltab.descr', 'caltab.ps') 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /mlp颜色识别/colors.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | 8 | *学习颜色模型 9 | *打开用于学习的图片 10 | read_image (origiImg,'C:/Users/Public/Documents/MVTec/HALCON-18.11-Progress/examples/images/color/color_pieces_00.png') 11 | *根据图片来进行窗口创建 12 | dev_open_window_fit_image (origiImg, 0, 0, -1, -1, WindowHandle) 13 | *创建容纳region的容器 14 | gen_empty_obj (roiRegions) 15 | *选择所有的目标区域 16 | colors:=['黄色','粉红','蓝色','背景色'] 17 | for i:=1 to |colors| by 1 18 | dev_display (origiImg) 19 | disp_message (WindowHandle,'选择'+colors[i-1]+'的内部区域', 'image', 12, 12, 'black', 'false') 20 | draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2) 21 | gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2) 22 | concat_obj (Rectangle, roiRegions, roiRegions) 23 | endfor 24 | *对目标区域进行训练 25 | *创建mlp神经网络分类器 26 | create_class_mlp (3, 10, 4, 'softmax', 'normalization', 10, 42, MLPHandle) 27 | *将目标图给训练器 28 | add_samples_image_class_mlp (origiImg, roiRegions, MLPHandle) 29 | *训练 30 | train_class_mlp (MLPHandle, 200, 1, 0.01, Error, ErrorLog) 31 | *保存训练好的文件 32 | write_class_mlp (MLPHandle, 'F:/temp/colors.omc') 33 | *清理训练器 34 | clear_class_mlp (MLPHandle) 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /mlp颜色识别/使用训练好的模型识别color.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | *打开图片 8 | read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-18.11-Progress/examples/images/color/color_pieces_03.png') 9 | *根据图片创建窗口 10 | dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) 11 | 12 | *使用训练好的分类器进行识别 13 | *创建分类器的句柄 14 | read_class_mlp ('F:/temp/colors.omc',MLPHandle) 15 | *使用分类器 16 | classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5) 17 | 18 | select_shape (ClassRegions, SelectedRegions, 'area', 'and', 0, 120642) 19 | sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column') 20 | *选择对应的个数 21 | count_obj (SortedRegions, Number) 22 | for i := 1 to Number by 1 23 | select_obj (SortedRegions, ObjectSelected, i) 24 | dev_display (ObjectSelected) 25 | endfor 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /project/差异模型寻找缺陷/差异模型寻找缺陷.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *清空显示窗口。 7 | dev_close_window () 8 | *读取参考图像。这里读取图像是为了创建模板。 9 | read_image (Image, 'data/pen01') 10 | *因为参考图像因为拍摄的原因会有一些噪声,因此使用均值滤波对图像进行平滑。 11 | 12 | mean_image (Image, ImageMean, 3, 3) 13 | *获取图像的宽和高用于窗口显示 14 | get_image_size (Image, Width, Height) 15 | *设置窗口显示参数,包括设置绘制线条的颜色和线宽等 16 | dev_close_window () 17 | dev_open_window (0, 0, Width, Height, 'black', WindowHandle) 18 | dev_set_color ('red') 19 | dev_display (Image) 20 | dev_set_draw ('margin') 21 | dev_set_line_width(3) 22 | 23 | *对原图进行阈值分割,粗略的提取出印刷图案的区域 24 | threshold (ImageMean, Region, 0, 42) 25 | *对印刷图案区域做一定的膨胀,使选区完全包围印刷图案部分 26 | dilation_circle (Region, RegionDilation, 8.5) 27 | *将选择转化为包围的形状 28 | shape_trans (RegionDilation, RegionTrans, 'convex') 29 | *将形状区域作为感兴趣区域从原图中分割出来 30 | reduce_domain (ImageMean, RegionTrans, ImageReduced) 31 | 32 | *检查形状模板参数,为后续的形状模板匹配检查合适的层级参数。 33 | *这里只用了1层的金字塔图像,因为该形状已经可以满足检测的需求了 34 | inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 1, 20) 35 | *创建形状的轮廓,为了显示形状便于检查形状选择的是否完整 36 | gen_contours_skeleton_xld (ModelRegions, Model, 1, 'filter') 37 | *获取图像的面积和几何中心点坐标 38 | area_center (RegionTrans, Area, RowRef, ColumnRef) 39 | *创建形状模板。 40 | *金字塔层级为。因为测试图像与参考图像在光照,坐标方面的变化比较小,因此按默认值设置即可 41 | create_shape_model (ImageReduced, 1, rad(-10), rad(10), 'auto', 'none', 'use_polarity', 20, 10, ShapeModelID) 42 | *创建一个用于对比的差异模型,返回模型句柄VariationModelID 43 | create_variation_model (Width, Height, 'byte', 'standard', VariationModelID) 44 | 45 | *使用良品的训练图像对检查模板进行训练。 46 | *其中为了将各个图像进行对齐,避免可能的位移和旋转,先对图像做个仿射变换。 47 | *然后使用对变换后的良品图像进行训练,得到良品的检查模板。 48 | for Num := 1 to 2 by 1 49 | read_image (Image, 'data/pen0' + Num) 50 | find_shape_model (Image, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score) 51 | if (|Score| == 1) 52 | vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D) 53 | affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false') 54 | train_variation_model (ImageTrans, VariationModelID) 55 | dev_display (Model) 56 | endif 57 | endfor 58 | 59 | *准备检查模板。设置两个阈值AbsThreshold, VarThreshold。 60 | *前者定义了检测图像与检查模板的灰度差的绝对值的允许阈值。 61 | *后者定义了与理想图像的差异程度 62 | prepare_variation_model (VariationModelID, 20, 2) 63 | *读取待检测的图像,这里开始正式检测。 64 | *也可以连接相机进行拍摄,图像如果是彩色的,需要转换为单通道图像。 65 | stop() 66 | for Num := 1 to 3 by 1 67 | read_image (Image2, 'data/pen'+Num) 68 | *进行模板匹配。寻找图中的形状 69 | find_shape_model (Image2, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 4, 0.9, Row, Column, Angle, Score) 70 | if (|Score| == 1) 71 | *如果匹配成功,现将图像进行仿射变换用于和模板对齐。 vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D) 72 | vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D) 73 | affine_trans_image (Image2, ImageTrans2, HomMat2D, 'constant', 'false') 74 | *然后裁剪出感兴趣区域。对后面的比对做准备 75 | reduce_domain (ImageTrans2, RegionTrans, ImageReduced2) 76 | *将裁剪后的感兴趣区域图像与检查模板图像进行比对。提取出有差异的部分 77 | compare_variation_model (ImageReduced2, RegionDiff, VariationModelID) 78 | *将差异部分的区域分割开来 79 | connection (RegionDiff, ConnectedRegions) 80 | *对差异图像区域进行筛选,根据差异的面积排除掉极微小的无意义的差别部分。 81 | select_shape (ConnectedRegions, RegionsError, 'area', 'and', 20, 1000000) 82 | *计算提取出的差异的个数,作为缺陷数量。这是为了判别最终结果 83 | count_obj (RegionsError, NumError) 84 | *将缺陷部位标记出来。如果是良品,则显示的是没有标记的测试图像 85 | dev_clear_window () 86 | dev_display (ImageTrans2) 87 | dev_display (RegionsError) 88 | *打印结果。 89 | *如果结果为0,可以认为是良品,没有发生缺陷 90 | *如果缺陷个数不为0,则认为是次品 91 | set_tposition (WindowHandle, 20, 20) 92 | if (NumError == 0) 93 | write_string (WindowHandle, 'OK') 94 | else 95 | write_string (WindowHandle, 'Not OK') 96 | endif 97 | endif 98 | stop() 99 | endfor 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /图像分割/分水岭/watersheds.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/woodboard.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转化灰度图 14 | rgb1_to_gray (origImg, GrayImage) 15 | *高斯平滑 16 | gauss_filter (GrayImage, ImageGauss, 11) 17 | *分水岭分割 18 | watersheds (ImageGauss, Basins, Watersheds) 19 | *提取盆地区域 20 | watersheds_threshold (ImageGauss, Basins1, 50) 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /图像分割/区域生长法/regiongrowing_mean多点区域增长.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/village.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *中值滤波 14 | median_image (origImg, ImageMedian, 'circle', 2, 'mirrored') 15 | *区域增长 16 | regiongrowing (ImageMedian, Regions, 1, 1, 3, 500) 17 | *形状拟合 18 | shape_trans (Regions, RegionTrans, 'inner_center') 19 | *断开连接 20 | connection (RegionTrans, ConnectedRegions) 21 | *计算区域中心坐标 22 | area_center (ConnectedRegions, Area, Row, Column) 23 | *多点区域增长 24 | regiongrowing_mean (ImageMedian, Regions1, Row, Column, 25, 100) 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /图像分割/区域生长法/regiongrowing区域生长.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/village.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | mean_image (origImg, ImageMean, 5, 5) 14 | *区域生长 15 | regiongrowing(ImageMean, Regions, 1, 1, 3, 100) 16 | *闭操作 17 | closing_circle (Regions, RegionClosing, 3.5) 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /图像分割/阈值处理/auto_threshold自适应阈值_根据灰度直方图的波峰分割.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/shapes.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度转换 14 | rgb1_to_gray (origImg, GrayImage) 15 | *对灰度图进行自动阈值处理 16 | auto_threshold (GrayImage, Regions, 8.0) 17 | 18 | *显示直方图 19 | *原图的直方图 20 | dev_open_window (0, 0, 512, 512, 'black', WindowHandle1) 21 | gray_histo (GrayImage,GrayImage,AbsoluteHisto, RelativeHisto) 22 | dev_set_color ('red') 23 | gen_region_histo (Region, AbsoluteHisto, 255, 5, 1) 24 | *平滑后的直方图 25 | dev_set_color ('green') 26 | create_funct_1d_array (AbsoluteHisto, Function) 27 | smooth_funct_1d_gauss (Function, 8, SmoothedFunction) 28 | funct_1d_to_pairs (SmoothedFunction, XValues, YValues) 29 | gen_region_histo (Region1, YValues, 255, 5, 1) 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /图像分割/阈值处理/binary_threshold单一背景自动阈值分割.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *打开图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/codes.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *阈值分割 14 | binary_threshold (origImg, Region, 'max_separability', 'dark', UsedThreshold) 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /图像分割/阈值处理/char_threshold字符提取_提取灰度曲线峰值.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/char.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *暗字符分割,其实是提取灰度曲线的峰值 14 | char_threshold (origImg, origImg, Characters, 2, 99.8, Threshold) 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /图像分割/阈值处理/dyn_threshold局部阈值分割_不明显数字分割.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/text.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *图像转灰度图 14 | rgb1_to_gray (origImg, GrayImage) 15 | *使用图像相乘来增强图像,还有scale_image 16 | mult_image (GrayImage, GrayImage, ImageResult, 0.005, 0) 17 | *均值滤波 18 | mean_image (ImageResult, ImageMean, 41, 41) 19 | *局部阈值分割 20 | dyn_threshold (ImageResult, ImageMean, RegionDynThresh, 5, 'dark') 21 | *开运算去除小杂点 22 | opening_circle (RegionDynThresh, RegionOpening, 1.5) 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /图像分割/阈值处理/dyn_threshold局部阈值分割_大蒜.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (orgiImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/garlic.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (orgiImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (orgiImg) 13 | *中值滤波预处理 14 | mean_image (orgiImg, ImageMean, 41, 41) 15 | *动态阈值分割 16 | dyn_threshold (orgiImg,ImageMean, RegionDynThresh, 30, 'not_equal') 17 | *腐蚀去掉点 18 | erosion_circle (RegionDynThresh, RegionErosion, 1.5) 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /图像分割/阈值处理/threshold全局阈值处理.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/codes.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转化为灰度图 14 | rgb1_to_gray (origImg, GrayImage) 15 | *全局阈值分割 16 | threshold (GrayImage, Regions, 0, 125) 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /图像分割/阈值处理/var_threshold变化分割.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/holes.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度转换 14 | rgb1_to_gray (origImg, GrayImage) 15 | *直接变化分割 16 | var_threshold (GrayImage, Region, 15, 15, 0.2, 35, 'dark') 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /图像增强/图像平滑与去噪/gauss高斯滤波.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图 9 | read_image (noiseImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/marker.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (noiseImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (noiseImg) 13 | *高斯滤波 14 | gauss_filter (noiseImg, ImageGauss, 5) 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /图像增强/图像平滑与去噪/mean中值滤波.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (noiseImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/marker.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (noiseImg, 0, 0, -1, -1, WindowHandle) 12 | *显示原图 13 | dev_display (noiseImg) 14 | *使用中值滤波 15 | mean_image (noiseImg, ImageMean, 9, 9) 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /图像增强/图像平滑与去噪/median中值滤波.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (noiseImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/marker.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (noiseImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (noiseImg) 13 | *中值滤波 14 | median_image (noiseImg, ImageMedian, 'circle', 1, 'continued') 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /图像增强/增强对比度/emphasise.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭原窗口 7 | dev_close_window () 8 | *打开图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/text.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | *显示原图 13 | dev_display (origImg) 14 | *对图像进行emphasize变化,图像锐化 15 | emphasize(origImg, ImageEmphasize, 7, 7, 1) 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /图像增强/增强对比度/scale_img.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/text.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | *显示原图 13 | dev_display (origImg) 14 | 15 | *对图像进行对比度增强 16 | *也可以用助手操作scale_image 17 | scale_image_max (origImg, ImageScaleMax) 18 | *显示增强后的图片 19 | dev_display (ImageScaleMax) 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /图像增强/直方图均衡/equHisto.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭原窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/boardEqu.jpg') 10 | *按照图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *先进行灰度转换 14 | rgb1_to_gray (origImg, GrayImage) 15 | *对图像进行直方图均衡预处理 16 | equ_histo_image(GrayImage, ImageEquHisto) 17 | 18 | *开启第二个窗口专用显示直方图 19 | dev_open_window (0, 0, 512, 512, 'black', histoWindowHandle) 20 | 21 | *显示原图的灰度直方图 22 | *设置显示颜色为红色 23 | dev_set_color ('red') 24 | *获得图像的直方图 25 | gray_histo (origImg,origImg, AbsoluteHisto, RelativeHisto) 26 | gen_region_histo (Region, AbsoluteHisto, 255, 255, 1) 27 | 28 | *显示直方图均衡转换的图像 29 | dev_set_color('green') 30 | *获得图像的直方图 31 | gray_histo (ImageEquHisto,ImageEquHisto, AbsoluteHisto1, RelativeHisto1) 32 | gen_region_histo (Region1, AbsoluteHisto1, 255, 255, 1) 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /图像增强/锐化失焦图像/shockFilter冲击滤波器.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图像 9 | read_image (origImg, 'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/defocusComponnet.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *使用冲击滤波算法进行锐化图像,此处边缘提取使用canny算子 14 | shock_filter (origImg, SharpenedImage, 0.5, 20, 'canny', 2.5) 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /寻找手机关屏幕状态/algorithm.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /形态学处理/bottom_hat底帽操作.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/shapes.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转化为hsv 14 | decompose3 (origImg, rChn, gChn, bChn) 15 | trans_from_rgb (rChn, gChn, bChn, hChn, sChn, iChn, 'hsv') 16 | *阈值分割 17 | threshold (sChn, Regions, 180, 255) 18 | *生成底帽操作的滤波核 19 | gen_circle (Circle, 10, 10, 10) 20 | *底帽操作 21 | bottom_hat (Regions, Circle, RegionBottomHat) 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /形态学处理/closing闭运算.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | read_image (Image, 'printer_chip/printer_chip_01') 7 | gen_circle (Circle, 200, 200, 100.5) 8 | closing(Image, Circle, RegionOpening) 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /形态学处理/dilation膨胀.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/board.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度转换 14 | rgb1_to_gray (origImg, GrayImage) 15 | *阈值分割 16 | threshold (GrayImage, Regions, 100, 255) 17 | *腐蚀出轮廓 18 | erosion_circle (Regions, RegionErosion, 7.5) 19 | erosion_circle (RegionErosion, RegionErosion1, 6.5) 20 | *膨胀 21 | dilation_circle (RegionErosion1, RegionDilation, 3.5) 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /形态学处理/erosion腐蚀.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/board.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度转换 14 | rgb1_to_gray (origImg, GrayImage) 15 | *阈值分割 16 | threshold (GrayImage, Regions, 100, 255) 17 | *腐蚀出轮廓 18 | erosion_circle (Regions, RegionErosion, 7.5) 19 | erosion_circle (RegionErosion, RegionErosion1, 6.5) 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /形态学处理/opening开运算.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | read_image (Image, 'printer_chip/printer_chip_01') 7 | gen_circle (Circle, 200, 200, 100.5) 8 | opening(Image, Circle, RegionOpening) 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /形态学处理/top_hat顶帽操作.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/board.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转为灰度图 14 | rgb1_to_gray (origImg, GrayImage) 15 | *生成矩形区域 16 | gen_rectangle1 (ROI_0, 237.78, 90.5278, 955.38, 964.027) 17 | *裁剪图片 18 | reduce_domain (GrayImage, ROI_0, ImageReduced) 19 | *阈值分割 20 | threshold (ImageReduced, Regions, 85, 255) 21 | *生成圆形滤波核 22 | gen_circle (Circle, 6, 6, 7.5) 23 | *顶帽操作 24 | top_hat (Regions,Circle, RegionTopHat) 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /形态学处理/底帽提取暗图区域.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/shapes.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转为灰度图 14 | rgb1_to_gray (origImg, GrayImage) 15 | *阈值分割 16 | threshold (GrayImage, Regions, 145, 255) 17 | *底帽过滤核 18 | gen_circle (Circle, 10, 10, 100) 19 | *底帽操作 20 | bottom_hat (Regions, Circle, RegionBottomHat) 21 | *裁剪 22 | reduce_domain (origImg, RegionBottomHat, ImageReduced) 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /形态学处理/灰度图膨胀腐蚀开闭操作.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/village.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度化 14 | rgb1_to_gray (origImg, GrayImage) 15 | *膨胀 16 | gray_dilation_shape (GrayImage, ImageMax, 11, 11, 'octagon') 17 | *腐蚀 18 | gray_erosion_shape (GrayImage, ImageMin, 11, 11, 'octagon') 19 | *开 20 | gray_opening_shape (GrayImage, ImageOpening, 11, 11, 'octagon') 21 | *闭 22 | gray_closing_shape (GrayImage, ImageClosing, 11, 11, 'octagon') 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /形态学处理/计算图片的树木个数.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/logs.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转化为灰度图 14 | rgb1_to_gray (origImg, GrayImage) 15 | *阈值分割 16 | scale_image (GrayImage, ImageScaled, 3.80597, 0) 17 | threshold (ImageScaled, Regions, 200, 255) 18 | *开操作 19 | *腐蚀135°的连接缝隙 20 | gen_rectangle2 (Rectangle, 20, 20, rad(135), 15, 5) 21 | opening (Regions, Rectangle, RegionOpening) 22 | *腐蚀80°的连接缝隙 23 | gen_rectangle2 (Rectangle2, 20, 20, rad(80), 20, 5) 24 | opening (RegionOpening, Rectangle2, RegionOpening2) 25 | *腐蚀0°的连接缝隙 26 | opening_rectangle1 (RegionOpening2, RegionOpening1, 20, 1) 27 | *断开连接操作 28 | connection (RegionOpening1, ConnectedRegions) 29 | *计数 30 | count_obj (ConnectedRegions, Number) 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /手眼标定/九点标定算子.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | * Image Acquisition 01: Code generated by Image Acquisition 01 7 | read_image (Image, 'C:/Users/Administrator/Desktop/标定板图片.png') 8 | dev_close_window () 9 | dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) 10 | dev_display (Image) 11 | binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold) 12 | connection (Region, ConnectedRegions) 13 | *筛选出来九个点 14 | select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70) 15 | shape_trans (SelectedRegions, RegionTrans, 'outer_circle') 16 | *求出九点坐标 17 | area_center (RegionTrans, Area, Row, Column) 18 | disp_message (WindowHandle, 'R:'+Row+' C:'+Column, 'Image', Row, Column, 'black', 'true') 19 | *九点标定行 20 | PxRow:=[23.5, 23.5, 23.5, 71.5, 71.5, 71.5, 118.5, 118.5, 118.5] 21 | *九点标定列 22 | PxColunm:=[28.5, 75.5, 122.5, 28.5, 75.5, 122.5, 28.5, 75.5, 122.5] 23 | 24 | 25 | *机器坐标行 26 | Qx:=[100,50,0,100,50,0,100,50,0] 27 | *机器坐标列 28 | Qy:=[0,0,0,50,50,50,100,100,100] 29 | 30 | *拿到机器坐标和像素坐标求出关系矩阵 31 | * 标定行 标定列 机器X 机器Y 得到矩阵 32 | vector_to_hom_mat2d (PxRow, PxColunm, Qx, Qy, HomMat2D) 33 | *保存矩阵 34 | write_tuple (HomMat2D, '九点标定.tup') 35 | *读取矩阵 36 | read_tuple ('九点标定.tup', HomMat2D) 37 | *利用求出来的物体行列坐标得到机器坐标 38 | affine_trans_point_2d (HomMat2D, Row, Column, Qx1, Qy1) 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /手眼标定/制作标定板.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *生成手眼标定的标定板 7 | create_caltab (27, 31, 0.00258065, [13,6,6,20,20], [15,6,24,6,24], 'light_on_dark', 'calplate.cpd', 'calplate.ps') 8 | *生成单相机标定板 9 | gen_caltab (7, 7, 0.0125, 0.5, 'E:/work/AutoTestEquipmentNetPre/algorithm/caltabcaltab.descr', 'E:/work/AutoTestEquipmentNetPre/algorithm/caltabcaltab.ps') 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/GetZYZDegree.hdvp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Length:=|Pose| 14 | if(Length<7) 15 | return() 16 | endif 17 | pose_to_hom_mat3d (Pose, HomMat3D1) 18 | X:=HomMat3D1[3] 19 | Y:=HomMat3D1[7] 20 | Z:=HomMat3D1[11] 21 | * convert_pose_type (Pose, 'Rp+T', 'abg', 'point', PoseOut) 22 | * 获得ZYZ中的第一个Z 23 | tuple_atan2 (HomMat3D1[6], HomMat3D1[2], ATan) 24 | RZ0 := deg(ATan) 25 | * 获得ZYZ中的Y 26 | tuple_sqrt (HomMat3D1[6]*HomMat3D1[6]+HomMat3D1[2]*HomMat3D1[2], Sqrt) 27 | tuple_atan2 (Sqrt, HomMat3D1[10], ATan1) 28 | RY := deg(ATan1) 29 | * 获得ZYZ中的第二个Z 30 | tuple_atan2 (HomMat3D1[9], -HomMat3D1[8], ATan2) 31 | RZ1 := deg(ATan2) 32 | resultArr:=[X,Y,Z,RZ0,RY,RZ1] 33 | return () 34 | 35 | 36 | 37 | 38 | real 39 | pose 40 | 41 | real 42 | 43 | 44 | 45 | real 46 | real 47 | 48 | real 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/calcData/final_campar.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/手眼标定/眼在手上/calcData/final_campar.dat -------------------------------------------------------------------------------- /手眼标定/眼在手上/calcData/final_pose_base_calplate.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.298025228579 359.382879699697 359.773763296611 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.269826071077742 0.483661488805403 -0.328313350516083 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:54 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/calcData/final_pose_base_plane.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.298025228578 359.382879699695 359.773763296609 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.269879923942091 0.483600235035996 -0.333312685256299 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:54 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/calcData/final_pose_cam_tool.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 1.31691809828225 359.346986640932 62.96760779968 10 | 11 | # Translation vector (x y z [m]): 12 | t 0.0010328251357287 0.111026288424712 0.0396271349417897 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:54 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/caltab.descr: -------------------------------------------------------------------------------- 1 | # Plate Description Version 2 2 | # HALCON Version 18.11 -- Tue Nov 17 15:26:07 2020 3 | # Description of the standard calibration plate 4 | # used for the camera calibration in HALCON 5 | # (generated by gen_caltab) 6 | # 7 | # 8 | 9 | # 7 rows x 7 columns 10 | # Width, height of calibration plate [meter]: 0.1, 0.1 11 | # Distance between mark centers [meter]: 0.0125 12 | 13 | # Number of marks in y-dimension (rows) 14 | r 7 15 | 16 | # Number of marks in x-dimension (columns) 17 | c 7 18 | 19 | # offset of coordinate system in z-dimension [meter] (optional): 20 | z 0 21 | 22 | # Rectangular border (rim and black frame) of calibration plate 23 | # rim of the calibration plate (min x, max y, max x, min y) [meter]: 24 | o -0.05125 0.05125 0.05125 -0.05125 25 | # outer border of the black frame (min x, max y, max x, min y) [meter]: 26 | i -0.05 0.05 0.05 -0.05 27 | # triangular corner mark given by two corner points (x,y, x,y) [meter] 28 | # (optional): 29 | t -0.05 -0.0375 -0.0375 -0.05 30 | 31 | # width of the black frame [meter]: 32 | w 0.003125 33 | 34 | # calibration marks: x y radius [meter] 35 | 36 | # calibration marks at y = -0.0375 m 37 | -0.0375 -0.0375 0.003125 38 | -0.025 -0.0375 0.003125 39 | -0.0125 -0.0375 0.003125 40 | 0 -0.0375 0.003125 41 | 0.0125 -0.0375 0.003125 42 | 0.025 -0.0375 0.003125 43 | 0.0375 -0.0375 0.003125 44 | 45 | # calibration marks at y = -0.025 m 46 | -0.0375 -0.025 0.003125 47 | -0.025 -0.025 0.003125 48 | -0.0125 -0.025 0.003125 49 | 0 -0.025 0.003125 50 | 0.0125 -0.025 0.003125 51 | 0.025 -0.025 0.003125 52 | 0.0375 -0.025 0.003125 53 | 54 | # calibration marks at y = -0.0125 m 55 | -0.0375 -0.0125 0.003125 56 | -0.025 -0.0125 0.003125 57 | -0.0125 -0.0125 0.003125 58 | 0 -0.0125 0.003125 59 | 0.0125 -0.0125 0.003125 60 | 0.025 -0.0125 0.003125 61 | 0.0375 -0.0125 0.003125 62 | 63 | # calibration marks at y = 0 m 64 | -0.0375 0 0.003125 65 | -0.025 0 0.003125 66 | -0.0125 0 0.003125 67 | 0 0 0.003125 68 | 0.0125 0 0.003125 69 | 0.025 0 0.003125 70 | 0.0375 0 0.003125 71 | 72 | # calibration marks at y = 0.0125 m 73 | -0.0375 0.0125 0.003125 74 | -0.025 0.0125 0.003125 75 | -0.0125 0.0125 0.003125 76 | 0 0.0125 0.003125 77 | 0.0125 0.0125 0.003125 78 | 0.025 0.0125 0.003125 79 | 0.0375 0.0125 0.003125 80 | 81 | # calibration marks at y = 0.025 m 82 | -0.0375 0.025 0.003125 83 | -0.025 0.025 0.003125 84 | -0.0125 0.025 0.003125 85 | 0 0.025 0.003125 86 | 0.0125 0.025 0.003125 87 | 0.025 0.025 0.003125 88 | 0.0375 0.025 0.003125 89 | 90 | # calibration marks at y = 0.0375 m 91 | -0.0375 0.0375 0.003125 92 | -0.025 0.0375 0.003125 93 | -0.0125 0.0375 0.003125 94 | 0 0.0375 0.003125 95 | 0.0125 0.0375 0.003125 96 | 0.025 0.0375 0.003125 97 | 0.0375 0.0375 0.003125 98 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/innerPara.cal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/手眼标定/眼在手上/innerPara.cal -------------------------------------------------------------------------------- /手眼标定/眼在手上/objTest/objPose/robot_pose_trainImg.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.999342093225 0.0069690141825558 62.5330000400114 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.308353 0.100665 0.100407 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 14:12:37 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/objTest/objPose/robot_pose_trainImgPurpose.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.997918853237 0.00875607378803346 62.5330001590229 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.44465 0.363515 -0.03256 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 14:13:03 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/objTest/rawObjPose.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/手眼标定/眼在手上/objTest/rawObjPose.csv -------------------------------------------------------------------------------- /手眼标定/眼在手上/objTest/temp.csv: -------------------------------------------------------------------------------- 1 | -0.180768,0.458463,0.404345,89.376,179.098,-27.224 2 | -0.207198,0.435096,0.456763,30.489,178.839,-66.052 3 | -0.207197,0.435089,0.385334,112.632,177.736,16.058 4 | -0.064024,0.498219,0.339786,159.745,177.736,16.075 5 | -0.115519,0.455054,0.516222,142.065,177.735,16.102 6 | ,,,,, 7 | ,,,,, 8 | ,,,,, 9 | -0.000180768,0.000458463,0.000404345,,, 10 | -0.000207198,0.000435096,0.000456763,,, 11 | -0.000207197,0.000435089,0.000385334,,, 12 | -0.000064024,0.000498219,0.000339786,,, 13 | -0.000115519,0.000455054,0.000516222,,, 14 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/objTest/writePicture.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | * Image Acquisition 01: Code generated by Image Acquisition 01 7 | open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '00305335895d_Basler_acA380010gm', 0, -1, AcqHandle) 8 | grab_image_start (AcqHandle, -1) 9 | 10 | index:=0 11 | * rootPath:='C:/Users/Zr/Desktop/temp/temp/' 12 | * rootPath:='E:/work/AutoTestEquipmentNetPre/algorithm/手眼标定/picture/' 13 | rootPath:='E:/work/AutoTestEquipmentNetPre/algorithm/手眼标定/objTest/objImage/' 14 | while (true) 15 | grab_image_async (Image, AcqHandle, -1) 16 | * Image Acquisition 01: Do something 17 | * write_image (Image, 'bmp', 0, rootPath+2+'.bmp') 18 | write_image (Image, 'bmp', 0, rootPath+'trainImg'+'.bmp') 19 | * stop () 20 | * index:=index+1 21 | endwhile 22 | close_framegrabber (AcqHandle) 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/outPara.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 0.52822283715667 358.812322103349 1.69994088905691 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.0420227032324053 -0.0128764876783065 0.367409706426271 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 15:27:39 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/pose.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/手眼标定/眼在手上/pose.csv -------------------------------------------------------------------------------- /手眼标定/眼在手上/poseIn.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/手眼标定/眼在手上/poseIn.xlsx -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_000.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.999586074969 0.00698775114538231 62.5330000252411 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.268184 0.372254 0.100405 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:33 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_001.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.999635694746 0.00598892992796879 62.5340000190399 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.233415 0.390741 0.100406 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_002.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.998787831771 0.00689424747093587 62.5340000729286 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.31519 0.36909 0.100403 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_003.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.999400133934 0.00697424983093978 62.533000036509 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.287953 0.379383 0.100405 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_004.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.999278243322 0.00595643075162204 62.5330000375167 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.23271 0.399855 0.100403 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_005.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 180.000734007778 0.00696141024396024 43.7979999554093 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.232709 0.399855 0.100401 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_006.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 180.003024710433 0.0063127748917107 23.2559998333707 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.223002 0.395734 0.100401 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_007.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 180.00222391304 0.00663733461658593 33.3209998711873 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.239651 0.379086 0.1004 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_008.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.999851448726 0.00699842357385257 52.2270000090725 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.239648 0.40399 0.100401 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_009.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 179.997912194524 0.00668139718263866 58.9630001217321 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.288537 0.382043 0.100394 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_010.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 181.750713990599 356.604268822195 86.0628987368379 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.268506 0.376722 0.100389 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_011.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 181.954932263788 356.716333404566 89.5500401302402 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.2921 0.381428 0.100391 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_012.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 183.094167581616 357.756997495309 112.853587349816 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.315986 0.381429 0.100393 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_013.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 183.564781939617 358.626258574761 127.717750997056 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.34958 0.414723 0.100392 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_014.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 183.564925527138 358.626631644562 127.7187411086 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.344285 0.396757 0.072059 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_015.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 183.806947036327 359.696601312101 144.210083208227 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.36552 0.428113 0.072058 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_016.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 183.788126926858 359.515027640532 141.468037981637 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.365519 0.440053 0.086127 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_017.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 183.644902630767 1.13734528935453 166.062810183495 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.382167 0.497407 0.086126 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/robotPose/robot_pose_018.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 183.519648920477 358.5168951202 125.931570039931 10 | 11 | # Translation vector (x y z [m]): 12 | t -0.357108 0.431157 0.086127 13 | 14 | # 15 | # HALCON Version 18.11 -- Thu Jan 28 17:12:34 2021 16 | 17 | # 18 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/roiModel.shm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/手眼标定/眼在手上/roiModel.shm -------------------------------------------------------------------------------- /手眼标定/眼在手上/temp.csv: -------------------------------------------------------------------------------- 1 | original,-444.65,363.515,-32.56,-13.37,179.991,-130.837 2 | trainImgPurpose,-0.427501,0.360342,-0.03258,-19.244,179.988,-136.367 3 | 1,-0.411868,0.363075,-0.0326135,-24.6148,179.988,-141.345 4 | ,,,,,, 5 | ,-0.015633,-0.002733,3.35E-05,5.3708,0,4.978 6 | ,,,,,, 7 | ,,,,,, 8 | ,-411.868,363.075,-32.6135,-24.6148,179.988,-141.345 9 | ,-32.782,0.44,0.0535,11.2448,0.003,10.508 10 | ,38.354,0.29,0.723,,, 11 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/temp步骤.txt: -------------------------------------------------------------------------------- 1 | point linshi3\r\n 2 | -198.095,334.015,420.327,146.209,177.726, 45.412\r\n 3 | \r\n 4 | -212.367,332.75,420.762,145.754,177.574,4.74988\r\n\r\n -------------------------------------------------------------------------------- /手眼标定/眼在手上/存储标定图片.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *使用标定助手去采集 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /手眼标定/眼在手上/机器人指令查询.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/手眼标定/眼在手上/机器人指令查询.xlsx -------------------------------------------------------------------------------- /手眼标定/眼在手上/机器人连接.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/手眼标定/眼在手上/机器人连接.png -------------------------------------------------------------------------------- /手眼标定/简单九点标定/simple9Calibration.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *用机械手绘制9个坐标点,并记录 7 | columns:=[1,2,3,4,5,6,7,8,9] 8 | rows:=[1,2,3,4,5,6,7,8,9] 9 | *使用相机对照片拍照,找到每个点的中心点 10 | area_center (Regions, Area, Row, Column) 11 | *进行仿射变换,找到变化的矩阵 12 | vector_to_hom_mat2d (Row, Column, rows, columns, HomMat2D) 13 | 14 | *将图片的坐标点转换到机械手的坐标,注意column->x,row->y 15 | affine_trans_point_2d (HomMat2D, theColumn, theRow, Qx, Qy) 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /文件读取/csv文件读取/csv_read.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *打开csv文件,因为是读取保存内容,所以算子第二个参数选择“input”,如果选择其他项可能无法读出。FileHandle是打开文件的句柄 7 | open_file ('E:/practice/halcon/HalconAlgorithm/文件读取/csv文件读取/test.csv', 'input', FileHandle) 8 | *第一行内容为标题 9 | fread_line (FileHandle, outLine, IsEOF) 10 | index:=0 11 | while (not IsEOF) 12 | fread_line (FileHandle, outLine, IsEOF) 13 | *读取打开文件中的二行内容,如果返回值IsEOF是0,则代表已经读取到。如果没有读取到则返回1 14 | if (not IsEOF) 15 | *对读取到的内容进行分割,因为 fread_line算子读取出的是一个string形式的变量,需要对其进行分割 16 | *从csv中读取出的内容是以逗号“,”或者换行符“\n”结尾的,tuple_split 算子中第二个参数是选择分隔符号的,所以输入“,\n”。 17 | tuple_split (outLine, ', \n ', outLineSplit) 18 | tuple_number (outLineSplit, Numbers) 19 | dataAll.at(index):= Numbers 20 | index:=index+1 21 | endif 22 | endwhile 23 | *关闭已经打开的csv文件 24 | close_file(FileHandle) 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /文件读取/csv文件读取/test.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/文件读取/csv文件读取/test.csv -------------------------------------------------------------------------------- /板子焊点寻找/algorithm.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-18.11-Progress/examples/images/die/die_03.png') 8 | get_image_size (Image, Width, Height) 9 | dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) 10 | *使用助手进行二值化,寻找目标区域轮廓进行裁剪 11 | threshold (Image, Regions, 84, 255) 12 | *设置显示绿色边框 13 | dev_set_color ('green') 14 | dev_set_draw ('margin') 15 | *找到目标处理图 16 | shape_trans (Regions, RegionTrans, 'rectangle2') 17 | *裁剪目标区域 18 | reduce_domain (Image, RegionTrans, ImageReduced) 19 | *对目标区域进行二值化,找到ROI 20 | threshold (ImageReduced, Regions1, 0, 42) 21 | *形态学-开操作(圆腐蚀),找到目标圆 22 | opening_circle (Regions1, RegionOpening, 15) 23 | *分离连接组件 24 | connection (RegionOpening, ConnectedRegions) 25 | *特征值-圆度找到目标 26 | select_shape (ConnectedRegions, SelectedRegions, 'circularity', 'and', 0.851, 1) 27 | *转换为颜色块 28 | dev_set_colored(12) 29 | dev_set_draw ('fill') 30 | dev_display (SelectedRegions) 31 | *对所有对象从左到右在数组中进行排序 32 | sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column') 33 | *对每个对象进行最小外接圆拟合 34 | smallest_circle (SortedRegions, Row, Column, Radius) 35 | *计算圆心的数量 36 | cenNum:=|Radius| 37 | *直径 38 | diameter:=2*Radius 39 | *直径均值 40 | meanDiameter:=mean(diameter) 41 | *最小直径 42 | minDiameter:=min(diameter) 43 | *在原图上显示所有圆 44 | dev_display (Image) 45 | disp_circle (WindowHandle, Row, Column, Radius) 46 | *打印圆信息(白色) 47 | dev_set_color ('white') 48 | disp_message (WindowHandle, '直径:'+diameter$'.4', 'image', Row-diameter, Column, 'white', 'false') 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /模板匹配/基于描述符的模板匹配/descriptor_model基于描述符的模板.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | *读取参考图像,这里的参考图像应只包含识别的关键区域,用于创建模板 8 | read_image (ImageLabel, 'data/labelShape-0') 9 | *设置窗口参数用于显示图像 10 | get_image_size (ImageLabel, Width, Height) 11 | dev_open_window (0, 0, Width, Height, 'black', WindowHandle1) 12 | dev_set_draw ('margin') 13 | dev_display (ImageLabel) 14 | *设置用于存储特征点和感兴趣区域的变量 15 | NumPoints := [] 16 | RowRoi := [10,10,Height - 10,Height - 10] 17 | ColRoi := [10,Width - 10,Width - 10,10] 18 | *将参考图像中的除边缘外的区域都设为感兴趣区域。因为参考图像已经近似于匹配的纹理样本 19 | gen_rectangle1 (Rectangle, 10, 10, Height - 10, Width - 10) 20 | *显示参考图像上选择的ROI区域 21 | dev_set_line_width (4) 22 | dev_display (Rectangle) 23 | stop () 24 | *将感兴趣区域剪裁为模板图像 25 | reduce_domain (ImageLabel, Rectangle, ImageReduced) 26 | dev_clear_window () 27 | dev_display (ImageLabel) 28 | *创建基于描述符的模板 29 | create_uncalib_descriptor_model (ImageReduced, 'harris_binomial', [], [], ['min_rot','max_rot','min_scale','max_scale'], [-90,90,0.2,1.1], 42, ModelID) 30 | *设置模型的原点,为了后面获取坐标作参照 31 | set_descriptor_model_origin (ModelID, -Height / 2, -Width / 2) 32 | *获取模型中特征点的位置 33 | get_descriptor_model_points (ModelID, 'model', 'all', Row_D, Col_D) 34 | *将模型中计算出的特征点存入NumPoints变量中 35 | NumPoints := [NumPoints,|Row_D|] 36 | 37 | *读取测试图像,这里读取的是单通道灰度图像,因此省略了通道转化的步骤 38 | read_image (ImageGray, 'data/labelShape-1') 39 | dev_resize_window_fit_image (ImageGray, 0, 0, -1, -1) 40 | dev_display (ImageGray) 41 | *对描述符特征点进行匹配 42 | find_uncalib_descriptor_model (ImageGray, ModelID, 'threshold', 800, ['min_score_descr','guided_matching'], [0.003,'on'], 0.25, 1, 'num_points', HomMat2D, Score) 43 | *显示匹配结果,将特征点用不同的颜色绘制出来 44 | if ((|HomMat2D| > 0) and (Score > NumPoints[0] / 4)) 45 | get_descriptor_model_points (ModelID, 'search', 0, Row, Col) 46 | *创建十字标识符 47 | gen_cross_contour_xld (Cross, Row, Col, 6, 0.785398) 48 | projective_trans_region (Rectangle, TransRegion, HomMat2D, 'bilinear') 49 | projective_trans_pixel (HomMat2D, RowRoi, ColRoi, RowTrans, ColTrans) 50 | angle_ll (RowTrans[2], ColTrans[2], RowTrans[1], ColTrans[1], RowTrans[1], ColTrans[1], RowTrans[0], ColTrans[0], Angle) 51 | Angle := deg(Angle) 52 | if (Angle > 70 and Angle < 110) 53 | area_center (TransRegion, Area, Row, Column) 54 | dev_set_color ('green') 55 | dev_set_line_width (4) 56 | dev_display (TransRegion) 57 | dev_set_colored (6) 58 | dev_display (Cross) 59 | endif 60 | endif 61 | stop () 62 | *匹配结束,释放模板资源 63 | clear_descriptor_model (ModelID) 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /模板匹配/局部形变匹配/local_deformable局部形变匹配.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/creamlabel.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *寻找合适的参数 14 | determine_deformable_model_params (origImg, 'auto', 0, rad(360), 0.9, 1.1, 'auto', 'use_polarity', 'auto', 'auto', [], [], 'all', ParameterName, ParameterValue) 15 | *创建模板 16 | create_local_deformable_model (origImg, 'auto', 0, rad(360), 'auto', 1, 1, 'auto', 1, 1, 'auto', 'none', 'use_polarity', 'auto', 'auto', [], [], ModelID) 17 | 18 | *显示轮廓 19 | *获得局部变形模板的轮廓 20 | get_deformable_model_contours (ModelContours, ModelID, 1) 21 | *求取几何中心 22 | area_center (origImg,Area, Row, Column) 23 | *仿射变换 24 | hom_mat2d_identity (HomMat2DIdentity) 25 | hom_mat2d_translate (HomMat2DIdentity, Row, Column, HomMat2DTranslate) 26 | affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DTranslate) 27 | 28 | *读入图像 29 | read_image(dstImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/cream.jpg') 30 | *根据新图像改变窗口 31 | dev_resize_window_fit_image (dstImg, 0, 0, -1, -1) 32 | *灰度化 33 | rgb1_to_gray (dstImg, GrayImage) 34 | *使用局部形变模板匹配 35 | find_local_deformable_model (dstImg, ImageRectified, VectorField, DeformedContours, ModelID, 0, rad(360), 0.9, 1, 0.9, 1, 0.5, 0, 0, 0, 0.9, 'deformed_contours', 'subpixel', 'least_squares', Score, Row1, Column1) 36 | dev_display (dstImg) 37 | dev_display(DeformedContours) 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /模板匹配/形状匹配/baseImg.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/模板匹配/形状匹配/baseImg.tif -------------------------------------------------------------------------------- /模板匹配/形状匹配/matchShapeModel.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭以前的窗口 7 | dev_close_window () 8 | *读取用于创建模板的图片 9 | read_image (baseImg, 'E:/practice/halcon/HalconAlgorithm/模板匹配/形状匹配/baseImg.tif') 10 | *打开自适应图片的窗口 11 | dev_open_window_fit_image (baseImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (baseImg) 13 | *手动圈出roi区域 14 | gen_circle (capRoi, 268, 289, 67.2309) 15 | *裁剪出roi区域 16 | reduce_domain (baseImg, capRoi, ImageReduced) 17 | *转换到灰度图 18 | rgb1_to_gray (ImageReduced, GrayImage) 19 | *阈值分割 20 | threshold (GrayImage, Regions, 0, 143) 21 | *裁剪目标区域 22 | reduce_domain (baseImg,Regions, ImageReduced1) 23 | *生成对应的模板 24 | create_scaled_shape_model (ImageReduced1, 'auto', rad(0), rad(360), 'auto', 0.9, 1.1, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID) 25 | *获得创建模板的xld 26 | get_shape_model_contours (ModelContours, ModelID, 1) 27 | *仿射变换模板xld到图像上预览 28 | area_center (Regions, Area, Row1, Column1) 29 | vector_angle_to_rigid (0, 0, 0, Row1, Column1, 0, HomMat2D) 30 | affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D) 31 | 32 | *寻找模板 33 | *助手生成采集 34 | * Image Acquisition 01: Code generated by Image Acquisition 01 35 | open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] ', 0, -1, AcqHandle) 36 | grab_image_start (AcqHandle, -1) 37 | while (true) 38 | grab_image_async (Image, AcqHandle, -1) 39 | * Image Acquisition 01: Do something 40 | find_scaled_shape_model (Image, ModelID, rad(0), rad(360), 0.5, 1.5, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Scale, Score) 41 | *显示找到的图像 42 | for i:=0 to |Score|-1 by 1 43 | hom_mat2d_identity (HomMat2DIdentity) 44 | hom_mat2d_translate (HomMat2DIdentity, Row[i], Column[i], HomMat2DTranslate) 45 | hom_mat2d_rotate (HomMat2DTranslate, Angle, Row[i], Column[i], HomMat2DRotate) 46 | hom_mat2d_scale (HomMat2DRotate, Scale[i], Scale[i], Row[i], Column[i], HomMat2DScale) 47 | affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DScale) 48 | endfor 49 | endwhile 50 | close_framegrabber (AcqHandle) 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /模板匹配/形状匹配/使用模板文件.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/labelShape-1.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *读入模板 14 | read_shape_model ('test.shm',ModelID) 15 | *匹配模板 16 | find_shape_model (origImg, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score) 17 | *显示 18 | dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0) 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /模板匹配/形状匹配/生成模板文件.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/labelShape-0.jpg') 10 | *根据图打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *助手指定roi 14 | gen_rectangle1 (ROI_0, 30.3, 297.5, 265.5, 451.9) 15 | *裁剪 16 | reduce_domain (origImg, ROI_0, ImageReduced) 17 | *生成匹配模板 18 | create_shape_model (ImageReduced, 'auto', 0, rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID) 19 | *保存模板 20 | write_shape_model (ModelID, 'test.shm') 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /模板匹配/形状匹配/箭头匹配.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/arrow1.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *获得ROI 14 | gen_rectangle1 (ROI_0, 288.47, 172.11, 434.73, 305.651) 15 | *裁剪 16 | reduce_domain (origImg, ROI_0, ImageReduced) 17 | *显示金字塔看看而已 18 | inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, 30) 19 | *创建形状模板 20 | create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID) 21 | 22 | *打开图片 23 | read_image (dstImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/arrow2.jpg') 24 | *寻找 25 | find_shape_model (dstImg, ModelID, -0.39, 0.79, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score) 26 | *显示 27 | * get_shape_model_contours (ModelContours, ModelID, 1) 28 | * vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D) 29 | * affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D) 30 | dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0) 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /模板匹配/相关性匹配/ncc_model使用保存的模型文件寻找.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/carmex-1.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度化 14 | rgb1_to_gray (origImg, GrayImage) 15 | *读取ncc_model 16 | read_ncc_model ('E:/practice/halcon/HalconAlgorithm/模板匹配/相关性匹配/test.ncm', ModelID) 17 | *直接寻找 18 | find_ncc_model (GrayImage, ModelID, 0, rad(360), 0.4, 1, 0.5, 'true', 0, Row, Column, Angle, Score) 19 | 20 | gen_rectangle2_contour_xld (Rectangle, Row, Column, Angle, 60.5, 20.5) 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /模板匹配/相关性匹配/ncc_model创建并保存为文件.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/carmex-0.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度图转换 14 | rgb1_to_gray (origImg, GrayImage) 15 | *助手指定区域 16 | gen_rectangle2 (ROI_0, 164.226, 195.372, rad(43.3747), 82.1349, 52.7372) 17 | *裁剪 18 | reduce_domain (GrayImage, ROI_0, ImageReduced) 19 | *创建匹配模板 20 | create_ncc_model (ImageReduced, 'auto', 0, rad(180), 'auto', 'use_polarity', ModelID) 21 | *保存模板 22 | write_ncc_model (ModelID, 'test.ncm') 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /模板匹配/组件匹配/使用组件文件.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/bolts-1.jpg') 10 | *根据图打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *读入component model 14 | read_component_model ('test.cbm', ComponentModelID) 15 | *寻找 16 | find_component_model (origImg, ComponentModelID, [1,0,2], 0, rad(360), 0.5, 0, 0.5, 'stop_search', 'prune_branch', 'none', 0.5, 'least_squares', 0, 0.9, ModelStart, ModelEnd, Score, RowComp, ColumnComp, AngleComp, ScoreComp, ModelComp) 17 | *显示 18 | get_found_component_model (FoundComponents, ComponentModelID, ModelStart, ModelEnd, RowComp, ColumnComp, AngleComp, ScoreComp, ModelComp, 0, 'false', RowCompInst, ColumnCompInst, AngleCompInst, ScoreCompInst) 19 | *清除资源 20 | clear_component_model (ComponentModelID) 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /模板匹配/组件匹配/生成组件文件.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/bolts-0.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *生成对应的roi区域 14 | gen_rectangle1 (rec0, 135, 68, 286, 172) 15 | gen_rectangle2 (rec1, 241, 349, rad(25.3129), 81.8596, 41.901) 16 | gen_circle (cir0, 115, 254, 60.8112) 17 | *联合roi区域 18 | dev_set_draw ('margin') 19 | gen_empty_obj (componentRegions) 20 | concat_obj (componentRegions, rec0, componentRegions) 21 | concat_obj (componentRegions, rec1, componentRegions) 22 | concat_obj (componentRegions, cir0, componentRegions) 23 | *创建基于组件的模板 24 | create_component_model (origImg, componentRegions, 20, 20, rad(25), 0, rad(360), 'auto', 'auto', 'auto', 'auto', 0.5, 'auto', 'auto', 'auto', 'use_polarity', 'false', ComponentModelID, RootRanking) 25 | *保存 26 | write_component_model (ComponentModelID, 'test.cbm') 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /测量拟合/矩形直线测量对/measPairs.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入待测图像 9 | read_image (origImg, 'C:/Users/Public/Documents/MVTec/HALCON-18.11-Progress/examples/images/fuse.png') 10 | *根据图像创建窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | dev_set_draw ('margin') 14 | *使用助手 15 | 16 | * Measure 01: Code generated by Measure 01 17 | * Measure 01: Prepare measurement 18 | AmplitudeThreshold := 40 19 | RoiWidthLen2 := 11.5 20 | set_system ('int_zooming', 'true') 21 | * Measure 01: Coordinates for line Measure 01 [0] 22 | LineRowStart_Measure_01_0 := 223 23 | LineColumnStart_Measure_01_0 := 557 24 | LineRowEnd_Measure_01_0 := 355 25 | LineColumnEnd_Measure_01_0 := 558 26 | * Measure 01: Convert coordinates to rectangle2 type 27 | TmpCtrl_Row := 0.5*(LineRowStart_Measure_01_0+LineRowEnd_Measure_01_0) 28 | TmpCtrl_Column := 0.5*(LineColumnStart_Measure_01_0+LineColumnEnd_Measure_01_0) 29 | TmpCtrl_Dr := LineRowStart_Measure_01_0-LineRowEnd_Measure_01_0 30 | TmpCtrl_Dc := LineColumnEnd_Measure_01_0-LineColumnStart_Measure_01_0 31 | TmpCtrl_Phi := atan2(TmpCtrl_Dr, TmpCtrl_Dc) 32 | TmpCtrl_Len1 := 0.5*sqrt(TmpCtrl_Dr*TmpCtrl_Dr + TmpCtrl_Dc*TmpCtrl_Dc) 33 | TmpCtrl_Len2 := RoiWidthLen2 34 | * Measure 01: Create measure for line Measure 01 [0] 35 | * Measure 01: Attention: This assumes all images have the same size! 36 | gen_measure_rectangle2 (TmpCtrl_Row, TmpCtrl_Column, TmpCtrl_Phi, TmpCtrl_Len1, TmpCtrl_Len2, 768, 576, 'nearest_neighbor', MsrHandle_Measure_01_0) 37 | * Measure 01: *************************************************************** 38 | * Measure 01: * The code which follows is to be executed once / measurement * 39 | * Measure 01: *************************************************************** 40 | * Measure 01: ************* 41 | * Measure 01: * ATTENTION * 42 | * Measure 01: ************* 43 | * Measure 01: The image from the graphics window is not available. At this point, 44 | * Measure 01: it is necessary to ensure an image is stored in the variable 'Image' 45 | * Measure 01: Execute measurements 46 | measure_pairs (origImg, MsrHandle_Measure_01_0, 1, AmplitudeThreshold, 'all', 'all', Row1_Measure_01_0, Column1_Measure_01_0, Amplitude1_Measure_01_0, Row2_Measure_01_0, Column2_Measure_01_0, Amplitude2_Measure_01_0, Width_Measure_01_0, Distance_Measure_01_0) 47 | * Measure 01: Do something with the results 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_0.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_1.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_10.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_11.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_12.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_13.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_14.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_15.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_16.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_17.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_18.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_19.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_2.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_20.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_21.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_3.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_4.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_5.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_6.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_7.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_8.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/images/imagesimg_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/images/imagesimg_9.jpg -------------------------------------------------------------------------------- /深度学习/检测/找水杯/labels.hdict: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/labels.hdict -------------------------------------------------------------------------------- /深度学习/检测/找水杯/图片大小缩放.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | * Image Acquisition 01: Code generated by Image Acquisition 01 7 | list_files ('E:/practice/halcon/自己的杯子检测/images', ['files','follow_links'], ImageFiles) 8 | tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles) 9 | for Index := 0 to |ImageFiles| - 1 by 1 10 | read_image (Image, ImageFiles[Index]) 11 | * Image Acquisition 01: Do something 12 | zoom_image_size (Image, ImageZoom, 512, 320, 'constant') 13 | write_image (ImageZoom, 'jpeg 100', 0, 'E:/practice/halcon/自己的杯子检测/images'+'img_'+Index) 14 | endfor 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /深度学习/检测/找水杯/杯子检测_demo.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | * Image Acquisition 01: Code generated by Image Acquisition 01 7 | open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] Integrated Camera', 0, -1, AcqHandle) 8 | grab_image_start (AcqHandle, -1) 9 | create_dict (WindowDict) 10 | read_dl_model ('model_best.hdl', DLModelHandle) 11 | read_dict ('E:/practice/halcon/自己的杯子检测/labels.hdict', [], [], DLDataset) 12 | get_dict_tuple (DLDataset,'class_names', classNames) 13 | dev_get_window (WindowHandle) 14 | dev_set_draw ('margin') 15 | set_display_font (WindowHandle, 22, 'mono', 'true', 'false') 16 | while (true) 17 | grab_image_async (Image, AcqHandle, -1) 18 | zoom_image_size (Image, ImageZoom, 512, 320, 'constant') 19 | convert_image_type (ImageZoom, ImageConverted, 'real') 20 | * Image Acquisition 01: Do something 21 | gen_dl_samples_from_images (ImageConverted, DLSampleInference) 22 | apply_dl_model (DLModelHandle, DLSampleInference, [], DLResult) 23 | get_dict_tuple (DLResult, 'bbox_class_id', classId) 24 | if(|classId|) 25 | get_dict_tuple (DLResult, 'bbox_row', row0) 26 | get_dict_tuple (DLResult, 'bbox_col', col0) 27 | get_dict_tuple (DLResult, 'bbox_length1', length0) 28 | get_dict_tuple (DLResult, 'bbox_length2', length1) 29 | get_dict_tuple (DLResult, 'bbox_phi', phi) 30 | get_dict_tuple (DLResult, 'bbox_confidence', confidence) 31 | gen_rectangle2 (Rectangle, row0, col0, phi, length0, length1) 32 | dev_display(ImageConverted) 33 | dev_display (Rectangle) 34 | disp_message (WindowHandle, classNames[classId], 'window', 12, 12, 'black', 'true') 35 | endif 36 | * 37 | * dev_display_dl_data (DLSampleInference, DLResult, DLDataset, 'bbox_result', [], WindowDict) 38 | * dev_disp_text ('Press F5 to continue', 'window', 'bottom', 'right', 'black', [], []) 39 | 40 | endwhile 41 | close_framegrabber (AcqHandle) 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /深度学习/检测/找水杯/杯子训练项目.dltp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/深度学习/检测/找水杯/杯子训练项目.dltp -------------------------------------------------------------------------------- /特征提取/area_center.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/holes.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度图转化 14 | rgb1_to_gray (origImg, GrayImage) 15 | *自动二值化 16 | binary_threshold (GrayImage, Region, 'max_separability', 'light', UsedThreshold) 17 | *填充空洞 18 | fill_up (Region, RegionFillUp) 19 | *裁剪 20 | reduce_domain (GrayImage, RegionFillUp, ImageReduced) 21 | *二值化 22 | binary_threshold (ImageReduced, Region1, 'max_separability', 'dark', UsedThreshold1) 23 | *分离链接 24 | connection (Region1, ConnectedRegions) 25 | *求得每个的面积 26 | area_center (ConnectedRegions, Area, Row, Column) 27 | 28 | *显示 29 | count_obj (ConnectedRegions, Number) 30 | sort_region (ConnectedRegions, SortedRegions, 'first_point', 'true', 'column') 31 | for i:=1 to Number by 1 32 | select_obj (SortedRegions, ObjectSelected, i) 33 | endfor 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /特征提取/area_center_gray测试三维灰度图的体积中心.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/disparity.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *求取三维灰度图的体积中心 14 | area_center_gray (origImg, origImg, Area, Row, Column) 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /特征提取/area_holes计算孔洞面积.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/holes2.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度化 14 | rgb1_to_gray (origImg, GrayImage) 15 | *阈值分割 16 | threshold (GrayImage, Region, 50, 255) 17 | *计算空洞面积 18 | area_holes (Region, Area) 19 | *显示面积 20 | set_display_font (WindowHandle, 20, 'mono', 'false', 'false') 21 | disp_message (WindowHandle, '孔洞的面积为:'+Area, 'window', 12, 12, 'green', 'false') 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /特征提取/gen_cooc_matrix共生矩阵判定纹理/gen_cooc_matrix共生矩阵判定纹理_使用训练文件.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *批量读取图片 7 | list_image_files ('picture', 'default', [], ImageFiles) 8 | read_class_mlp ('train.omc', MLPHandle) 9 | *处理每张图片 10 | for i:=0 to |ImageFiles|-1 by 1 11 | *读取图片 12 | read_image (treeImg,ImageFiles[i]) 13 | *灰度化 14 | rgb1_to_gray (treeImg, GrayImage) 15 | *共生矩阵 16 | cooc_feature_image (GrayImage, GrayImage, 6, 0, Energy, Correlation, Homogeneity, Contrast) 17 | *获得特性组 18 | featureVec:=[Energy, Correlation, Homogeneity, Contrast] 19 | *识别 20 | classify_class_mlp (MLPHandle, featureVec, 1, Class, Confidence) 21 | endfor 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /特征提取/gen_cooc_matrix共生矩阵判定纹理/gen_cooc_matrix共生矩阵判定纹理_生成训练文件.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *批量读取图片 7 | list_image_files ('picture', 'default', [], ImageFiles) 8 | create_class_mlp (4, 10, 3, 'softmax', 'normalization', 10, 42, MLPHandle) 9 | *处理每张图片 10 | for i:=0 to |ImageFiles|-1 by 1 11 | *读取图片 12 | read_image (treeImg,ImageFiles[i]) 13 | *灰度化 14 | rgb1_to_gray (treeImg, GrayImage) 15 | *共生矩阵 16 | cooc_feature_image (GrayImage, GrayImage, 6, 0, Energy, Correlation, Homogeneity, Contrast) 17 | *获得特性组 18 | featureVec:=[Energy, Correlation, Homogeneity, Contrast] 19 | *训练特性 20 | add_sample_class_mlp (MLPHandle, featureVec, i) 21 | endfor 22 | *训练 23 | train_class_mlp (MLPHandle, 200, 1, 0.01, Error, ErrorLog) 24 | *保存训练的文件 25 | write_class_mlp (MLPHandle, 'train.omc') 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /特征提取/gen_cooc_matrix共生矩阵判定纹理/picture/tree0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/特征提取/gen_cooc_matrix共生矩阵判定纹理/picture/tree0.jpg -------------------------------------------------------------------------------- /特征提取/gen_cooc_matrix共生矩阵判定纹理/picture/tree1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/特征提取/gen_cooc_matrix共生矩阵判定纹理/picture/tree1.jpg -------------------------------------------------------------------------------- /特征提取/gen_cooc_matrix共生矩阵判定纹理/picture/tree2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/特征提取/gen_cooc_matrix共生矩阵判定纹理/picture/tree2.jpg -------------------------------------------------------------------------------- /特征提取/gen_cooc_matrix共生矩阵判定纹理/train.omc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/特征提取/gen_cooc_matrix共生矩阵判定纹理/train.omc -------------------------------------------------------------------------------- /特征提取/gray_features灰度图特征参数显示.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/disparity.jpg') 10 | *打开窗口并显示 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *读取灰度图信息 14 | gray_features (origImg,origImg, 'min', Value) 15 | gray_features (origImg, origImg, 'max', Value1) 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /特征提取/inner_circle最大内接圆.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/crossShape.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度图转化 14 | rgb1_to_gray (origImg, GrayImage) 15 | *指定矩形裁剪区域 16 | gen_rectangle1 (ROI_0, 134, 152, 325, 476) 17 | *裁剪 18 | reduce_domain (GrayImage, ROI_0, ImageReduced) 19 | *感觉没有用的清除指定区域的图像,可能用来初始化 20 | * gen_image_proto (ImageReduced, ImageCleared, 0) 21 | *阈值分割 22 | threshold (ImageReduced, Regions, 29, 234) 23 | *断开连接 24 | connection (Regions, ConnectedRegions) 25 | *选择最大的面积 26 | select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70) 27 | *显示面积大小 28 | area_center (SelectedRegions, Area, Row, Column) 29 | *最大内接圆 30 | inner_circle (SelectedRegions, Row1, Column1, Radius) 31 | gen_circle (Circle, Row1, Column1, Radius) 32 | *显示 33 | area_center (Circle, Area1, Row2, Column2) 34 | set_display_font (WindowHandle, 20, 'mono', 'false', 'false') 35 | disp_message (WindowHandle, '计算出的圆面积为:'+Area1+'像素', 'window', 12, 12, 'green', 'false') 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /特征提取/intensiy求取均值与偏差.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/disparity.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *求取均值和偏差 14 | intensity (origImg, origImg, Mean, Deviation) 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /特征提取/min_max_gray灰度图中最大最小灰度值.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/disparity.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *求得最小最大值,直方图波峰波谷向内收缩5% 14 | min_max_gray (origImg, origImg, 5, Min, Max, Range) 15 | *显示 16 | set_display_font (WindowHandle, 20, 'mono', 'true', 'false') 17 | disp_message (WindowHandle, '最小值为:'+Min+',最大值为:'+Max, 'window', 12, 12, 'green', 'false') 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /特征提取/select_gray灰度图特征筛选.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/village.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度图转化 14 | rgb1_to_gray (origImg, GrayImage) 15 | *阈值分割 16 | threshold (GrayImage, Regions, 167, 255) 17 | *开操作去掉噪点 18 | opening_circle (Regions, RegionOpening, 5.5) 19 | *断开连接 20 | connection (RegionOpening, ConnectedRegions) 21 | *选出大面积的区域 22 | select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 4002.49, 19962.6) 23 | *计算区域的偏差 24 | intensity (SelectedRegions, GrayImage, Mean, Deviation) 25 | *灰度筛选,可以由助手直接得到,先选择图像,在选择区域,助手生成 26 | select_gray (SelectedRegions, GrayImage, SelectedRegions1, 'deviation', 'and', 4, 10) 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /特征提取/select_shape特征选择_gen_image_proto清除指定区域.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/crossShape.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度图转化 14 | rgb1_to_gray (origImg, GrayImage) 15 | *指定矩形裁剪区域 16 | gen_rectangle1 (ROI_0, 134, 152, 325, 476) 17 | *裁剪 18 | reduce_domain (GrayImage, ROI_0, ImageReduced) 19 | *感觉没有用的清除指定区域的图像,可能用来初始化 20 | * gen_image_proto (ImageReduced, ImageCleared, 0) 21 | *阈值分割 22 | threshold (ImageReduced, Regions, 29, 234) 23 | *断开连接 24 | connection (Regions, ConnectedRegions) 25 | *选择最大的面积 26 | select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70) 27 | *显示面积大小 28 | area_center (SelectedRegions, Area, Row, Column) 29 | set_display_font (WindowHandle, 20, 'mono', 'false', 'false') 30 | disp_message (WindowHandle, '计算出的面积为:'+Area+'像素', 'window', 12, 12, 'green', 'false') 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /特征提取/smallest_rectangle2.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *打开图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/garlic2.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度图 14 | rgb1_to_gray (origImg, GrayImage) 15 | *均值滤波 16 | mean_image (GrayImage, ImageMean, 50, 50) 17 | *动态阈值 18 | dyn_threshold (GrayImage, ImageMean, RegionDynThresh, 5, 'light') 19 | *开操作 20 | opening_circle (RegionDynThresh, RegionOpening, 1.5) 21 | *断开连接 22 | connection (RegionOpening, ConnectedRegions) 23 | *选择最大面积 24 | select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70) 25 | *最小外接矩形 26 | smallest_rectangle2 (SelectedRegions, Row, Column, Phi, Length1, Length2) 27 | *绘制 28 | gen_rectangle2_contour_xld (Rectangle, Row, Column, Phi, Length1, Length2) 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /相机标定/caltab.descr: -------------------------------------------------------------------------------- 1 | # Plate Description Version 2 2 | # HALCON Version 18.11 -- Sat Oct 17 21:25:55 2020 3 | # Description of the standard calibration plate 4 | # used for the camera calibration in HALCON 5 | # (generated by gen_caltab) 6 | # 7 | # 8 | 9 | # 7 rows x 7 columns 10 | # Width, height of calibration plate [meter]: 0.1, 0.1 11 | # Distance between mark centers [meter]: 0.0125 12 | 13 | # Number of marks in y-dimension (rows) 14 | r 7 15 | 16 | # Number of marks in x-dimension (columns) 17 | c 7 18 | 19 | # offset of coordinate system in z-dimension [meter] (optional): 20 | z 0 21 | 22 | # Rectangular border (rim and black frame) of calibration plate 23 | # rim of the calibration plate (min x, max y, max x, min y) [meter]: 24 | o -0.05125 0.05125 0.05125 -0.05125 25 | # outer border of the black frame (min x, max y, max x, min y) [meter]: 26 | i -0.05 0.05 0.05 -0.05 27 | # triangular corner mark given by two corner points (x,y, x,y) [meter] 28 | # (optional): 29 | t -0.05 -0.0375 -0.0375 -0.05 30 | 31 | # width of the black frame [meter]: 32 | w 0.003125 33 | 34 | # calibration marks: x y radius [meter] 35 | 36 | # calibration marks at y = -0.0375 m 37 | -0.0375 -0.0375 0.003125 38 | -0.025 -0.0375 0.003125 39 | -0.0125 -0.0375 0.003125 40 | 0 -0.0375 0.003125 41 | 0.0125 -0.0375 0.003125 42 | 0.025 -0.0375 0.003125 43 | 0.0375 -0.0375 0.003125 44 | 45 | # calibration marks at y = -0.025 m 46 | -0.0375 -0.025 0.003125 47 | -0.025 -0.025 0.003125 48 | -0.0125 -0.025 0.003125 49 | 0 -0.025 0.003125 50 | 0.0125 -0.025 0.003125 51 | 0.025 -0.025 0.003125 52 | 0.0375 -0.025 0.003125 53 | 54 | # calibration marks at y = -0.0125 m 55 | -0.0375 -0.0125 0.003125 56 | -0.025 -0.0125 0.003125 57 | -0.0125 -0.0125 0.003125 58 | 0 -0.0125 0.003125 59 | 0.0125 -0.0125 0.003125 60 | 0.025 -0.0125 0.003125 61 | 0.0375 -0.0125 0.003125 62 | 63 | # calibration marks at y = 0 m 64 | -0.0375 0 0.003125 65 | -0.025 0 0.003125 66 | -0.0125 0 0.003125 67 | 0 0 0.003125 68 | 0.0125 0 0.003125 69 | 0.025 0 0.003125 70 | 0.0375 0 0.003125 71 | 72 | # calibration marks at y = 0.0125 m 73 | -0.0375 0.0125 0.003125 74 | -0.025 0.0125 0.003125 75 | -0.0125 0.0125 0.003125 76 | 0 0.0125 0.003125 77 | 0.0125 0.0125 0.003125 78 | 0.025 0.0125 0.003125 79 | 0.0375 0.0125 0.003125 80 | 81 | # calibration marks at y = 0.025 m 82 | -0.0375 0.025 0.003125 83 | -0.025 0.025 0.003125 84 | -0.0125 0.025 0.003125 85 | 0 0.025 0.003125 86 | 0.0125 0.025 0.003125 87 | 0.025 0.025 0.003125 88 | 0.0375 0.025 0.003125 89 | 90 | # calibration marks at y = 0.0375 m 91 | -0.0375 0.0375 0.003125 92 | -0.025 0.0375 0.003125 93 | -0.0125 0.0375 0.003125 94 | 0 0.0375 0.003125 95 | 0.0125 0.0375 0.003125 96 | 0.025 0.0375 0.003125 97 | 0.0375 0.0375 0.003125 98 | -------------------------------------------------------------------------------- /相机标定/caltab.ps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-2.0 2 | %%Title: caltab.ps 3 | %%Creator: HALCON Version 18.11 4 | %%CreationDate: Sat Oct 17 21:25:55 2020 5 | %%Orientation: Portrait 6 | %%BoundingBox: 0 0 596 842 7 | %%Pages: 1 8 | %%EndComments 9 | 10 | %%BeginProlog 11 | /$F2psDict 200 dict def 12 | $F2psDict begin 13 | $F2psDict /mtrx matrix put 14 | /meter {2834.6457 mul} def 15 | /l {lineto} bind def 16 | /m {moveto} bind def 17 | /s {stroke} bind def 18 | /n {newpath} bind def 19 | /gs {gsave} bind def 20 | /gr {grestore} bind def 21 | /clp {closepath} bind def 22 | /DrawEllipse { 23 | /endangle exch def 24 | /startangle exch def 25 | /yrad exch def 26 | /xrad exch def 27 | /y exch def 28 | /x exch def 29 | /savematrix mtrx currentmatrix def 30 | x y translate xrad yrad scale 0 0 1 startangle endangle arc 31 | savematrix setmatrix 32 | } def 33 | 34 | end 35 | /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def 36 | /$F2psEnd {$F2psEnteredState restore end} def 37 | %%EndProlog 38 | 39 | $F2psBegin 40 | 0 setlinecap 0 setlinejoin 0 setlinewidth 41 | 0 meter 0 meter translate 42 | 43 | %%Page: caltab 1 44 | % Polyline // whole calibration table = white rectangle 45 | n 0.15625 meter 0.19975 meter m 0.05375 meter 0.19975 meter l 0.05375 meter 0.09725 meter l 0.15625 meter 0.09725 meter l 46 | clp gs 1.00 setgray fill gr 47 | 48 | % Polyline // outer border of frame = black square 49 | n 0.155 meter 0.1985 meter m 0.055 meter 0.1985 meter l 0.055 meter 0.0985 meter l 0.155 meter 0.0985 meter l 50 | clp gs 0.00 setgray fill gr 51 | 52 | % Polyline // inner border of frame = white sqare 53 | n 0.151875 meter 0.195375 meter m 0.064375 meter 0.195375 meter l 0.058125 meter 0.189125 meter l 0.058125 meter 0.101625 meter l 0.151875 meter 0.101625 meter l 54 | clp gs 1.00 setgray fill gr 55 | 56 | 57 | % calibration marks at y = 0.111 m 58 | n 0.0675 meter 0.111 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 59 | n 0.08 meter 0.111 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 60 | n 0.0925 meter 0.111 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 61 | n 0.105 meter 0.111 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 62 | n 0.1175 meter 0.111 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 63 | n 0.13 meter 0.111 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 64 | n 0.1425 meter 0.111 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 65 | 66 | % calibration marks at y = 0.1235 m 67 | n 0.0675 meter 0.1235 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 68 | n 0.08 meter 0.1235 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 69 | n 0.0925 meter 0.1235 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 70 | n 0.105 meter 0.1235 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 71 | n 0.1175 meter 0.1235 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 72 | n 0.13 meter 0.1235 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 73 | n 0.1425 meter 0.1235 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 74 | 75 | % calibration marks at y = 0.136 m 76 | n 0.0675 meter 0.136 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 77 | n 0.08 meter 0.136 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 78 | n 0.0925 meter 0.136 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 79 | n 0.105 meter 0.136 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 80 | n 0.1175 meter 0.136 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 81 | n 0.13 meter 0.136 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 82 | n 0.1425 meter 0.136 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 83 | 84 | % calibration marks at y = 0.1485 m 85 | n 0.0675 meter 0.1485 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 86 | n 0.08 meter 0.1485 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 87 | n 0.0925 meter 0.1485 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 88 | n 0.105 meter 0.1485 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 89 | n 0.1175 meter 0.1485 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 90 | n 0.13 meter 0.1485 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 91 | n 0.1425 meter 0.1485 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 92 | 93 | % calibration marks at y = 0.161 m 94 | n 0.0675 meter 0.161 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 95 | n 0.08 meter 0.161 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 96 | n 0.0925 meter 0.161 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 97 | n 0.105 meter 0.161 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 98 | n 0.1175 meter 0.161 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 99 | n 0.13 meter 0.161 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 100 | n 0.1425 meter 0.161 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 101 | 102 | % calibration marks at y = 0.1735 m 103 | n 0.0675 meter 0.1735 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 104 | n 0.08 meter 0.1735 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 105 | n 0.0925 meter 0.1735 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 106 | n 0.105 meter 0.1735 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 107 | n 0.1175 meter 0.1735 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 108 | n 0.13 meter 0.1735 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 109 | n 0.1425 meter 0.1735 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 110 | 111 | % calibration marks at y = 0.186 m 112 | n 0.0675 meter 0.186 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 113 | n 0.08 meter 0.186 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 114 | n 0.0925 meter 0.186 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 115 | n 0.105 meter 0.186 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 116 | n 0.1175 meter 0.186 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 117 | n 0.13 meter 0.186 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 118 | n 0.1425 meter 0.186 meter 0.003125 meter 0.003125 meter 0 360 DrawEllipse gs 0.00 setgray fill gr 119 | 120 | showpage 121 | $F2psEnd 122 | 123 | %EOF 124 | -------------------------------------------------------------------------------- /相机标定/paras.cal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/相机标定/paras.cal -------------------------------------------------------------------------------- /相机标定/pos.dat: -------------------------------------------------------------------------------- 1 | # 2 | # 3D POSE PARAMETERS: rotation and translation 3 | # 4 | 5 | # Used representation type: 6 | f 0 7 | 8 | # Rotation angles [deg] or Rodriguez vector: 9 | r 359.928972421671 358.965261210511 180.513728141263 10 | 11 | # Translation vector (x y z [m]): 12 | t 0.0156751474240752 -0.00603731727859105 0.255707495716194 13 | 14 | # 15 | # HALCON Version 18.11 -- Sat Oct 17 21:33:57 2020 16 | 17 | # 18 | -------------------------------------------------------------------------------- /相机标定/使用标定板文件.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | * Calibration 01: Code generated by Calibration 01 7 | read_cam_par ('E:/practice/halcon/HalconAlgorithm/相机标定/paras.cal', CameraParameters) 8 | read_pose ('E:/practice/halcon/HalconAlgorithm/相机标定/pos.dat', CameraPose) 9 | *关闭窗口 10 | dev_close_window () 11 | *读入图片 12 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/chess.jpg') 13 | *根据图片打开窗口 14 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 15 | dev_display (origImg) 16 | *调整原点 17 | set_origin_pose (CameraPose, -1, -0.7, 0, PoseNewOrigin) 18 | *生成用于矫正的映射图,用来描述图像坐标系与世界坐标系之间的映射 19 | gen_image_to_world_plane_map (Map, CameraParameters, PoseNewOrigin, 640, 480, 640, 480, 0.003, 'bilinear') 20 | 21 | map_image (origImg, Map, ImageMapped) 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /相机标定/生成标定板文件.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *生成标定板文件 7 | gen_caltab (7, 7, 0.0125, 0.5, 'caltab.descr', 'caltab.ps') 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /简单相机采图处理/grabDealImg.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *打开相机,获得句柄 9 | open_framegrabber ('DirectShow',1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '0', -1, 1, AcqHandle) 10 | *捕捉一帧获得图像的大小 11 | grab_image(baseImg,AcqHandle) 12 | *获得图片的宽高 13 | get_image_size (baseImg,w,h) 14 | *新建窗口 15 | dev_open_window(0,0,w,h,'black', WindowHandle) 16 | *采集图像并处理 17 | *启动预抓图 18 | grab_image_start (AcqHandle, -1) 19 | while(1) 20 | *开始异步抓图 21 | grab_image_async (img,AcqHandle, -1) 22 | *显示图像,其实不要这个也显示了 23 | dev_display(img) 24 | 25 | *开始处理图像 26 | *转化为灰度图 27 | rgb1_to_gray(img,grayImg) 28 | *阈值提取亮处 29 | threshold(grayImg,Region, 200, 255) 30 | *填充区域 31 | fill_up(Region, RegionFillUp) 32 | *找到连接的区域 33 | connection(RegionFillUp, ConnectedRegions) 34 | *选出大面积的目标 35 | select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 500, 99999) 36 | *计算目标的个数 37 | count_obj (SelectedRegions,Numb) 38 | *设置显示文字颜色 39 | dev_set_color('white') 40 | *设置文字位置 41 | set_tposition (WindowHandle, 24, 12) 42 | *查询可以设置的字体 43 | * query_font (WindowHandle, Font) 44 | *设置字体 45 | set_font (WindowHandle, 'default-24') 46 | *设定输出文字 47 | *write_string会输出dev_set_color的颜色的字 48 | write_string(WindowHandle,'有'+Numb+'个目标') 49 | * disp_message (WindowHandle, '有'+Numb+'个目标啊', 'window', 12, 12, 'yellow', 'false') 50 | *设置目标颜色为多彩色(12) 51 | dev_set_colored (12) 52 | 53 | *每次处理完毕后停止,也可以设置断点的 54 | stop () 55 | endwhile 56 | 57 | *采集结束,释放相机资源 58 | close_framegrabber (AcqHandle) 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /车牌识别/倾斜车牌.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Z-eddy/HalconAlgorithm/61b69ceccf024e8a0a6984a2b9ecabea8a7c7e07/车牌识别/倾斜车牌.jpg -------------------------------------------------------------------------------- /车牌识别/车牌识别.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | *读取图片 8 | read_image (origiImage, 'E:/practice/halcon/HalconAlgorithm/车牌识别/倾斜车牌.jpg') 9 | *开启窗口 10 | dev_open_window_fit_image (origiImage, 0, 0, -1, -1, WindowHandle) 11 | 12 | *车牌定位及矫正 13 | *分离颜色通道 14 | decompose3 (origiImage, redChn, greenChn, blueChn) 15 | *转换到hsv色彩空间 16 | trans_from_rgb (redChn,greenChn,blueChn,hueChn, saturationChn, intensityChn, 'hsv') 17 | *根据筛选出的最高对比度图进行二值化 18 | threshold (saturationChn, Regions, 122, 255) 19 | *开操作去掉部分杂点 20 | opening_rectangle1 (Regions, RegionOpening, 3, 3) 21 | *阻断连接 22 | connection (RegionOpening, ConnectedRegions) 23 | *根据特征筛选出车牌区域 24 | select_shape (ConnectedRegions, SelectedRegions1, ['row','height'], 'and', [199.19,49.564], [500,100]) 25 | *连接分散的特征 26 | union1 (SelectedRegions1, RegionUnion) 27 | *填充空洞 28 | fill_up (RegionUnion, RegionFillUp) 29 | *矩形拟合 30 | shape_trans (RegionFillUp, RegionTrans, 'rectangle2') 31 | *计算矩形的旋转角度 32 | orientation_region (RegionTrans, Phi) 33 | *计算图像的参数 34 | area_center (RegionTrans, Area, Row, Column) 35 | *寻找图片旋转的矩阵 36 | vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D) 37 | *将车牌region旋转回来 38 | affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor') 39 | *将图片旋转回来 40 | affine_trans_image (origiImage,ImageAffineTrans, HomMat2D, 'constant', 'false') 41 | *裁剪目标区域 42 | reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced) 43 | 44 | *识别车牌 45 | rgb1_to_gray (ImageReduced, GrayImage) 46 | *反转颜色,因为训练的算法只识别黑色字体 47 | invert_image (GrayImage, ImageInvert) 48 | * bit_not (GrayImage, ImageNot) 49 | *二值化分离出中间数字区 50 | threshold (ImageInvert, Regions1, 0, 132) 51 | *分离单个 52 | connection (Regions1, ConnectedRegions1) 53 | *根据特征筛选 54 | select_shape (ConnectedRegions1, SelectedRegions, ['area','height'], 'and', [398.38,44.327], [1000,100]) 55 | *确定训练好的ocr模型 56 | read_ocr_class_mlp ( 'Industrial_0-9A-Z_NoRej.omc', OCRHandle) 57 | *识别数字 58 | do_ocr_multi_class_mlp (SelectedRegions, ImageInvert, OCRHandle, Class, Confidence) 59 | *找到最小外接矩形,确定打印数字的位置 60 | smallest_rectangle1 (SelectedRegions, Row1, Column1, Row2, Column2) 61 | *打印数字,显示在原图上 62 | set_font (WindowHandle, 'default-Normal-30') 63 | * disp_message (WindowHandle, Class, 'window', Row2+30, Column1+20, 'white', 'false') 64 | for i:=0 to |Class|-1 by 1 65 | disp_message (WindowHandle, Class[i], 'image', Row2[i], Column1[i], 'white', 'false') 66 | endfor 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /边缘检测/derivate_gauss图像边缘提取.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/flower.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转换灰度 14 | rgb1_to_gray (origImg, GrayImage) 15 | *边缘求取 16 | derivate_gauss (GrayImage, DerivGauss, 1, 'gradient') 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /边缘检测/edges_color_sub_pix彩图xld提取.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/flower.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *彩图边缘提取 14 | edges_color_sub_pix (origImg, Edges, 'canny', 1, 5, 70) 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /边缘检测/edges_image新式边缘检测.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/flower.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度化 14 | rgb1_to_gray (origImg, GrayImage) 15 | *边缘提取 16 | *canny提取极大值抑制 17 | edges_image (GrayImage, ImaAmp, ImaDir, 'canny', 1, 'nms', 20, 40) 18 | *canny提取非极大值抑制 19 | edges_image (GrayImage,ImaAmp1, ImaDir1, 'canny', 1, 'none', -1, -1) 20 | *使用极大值抑制的阈值分割 21 | binary_threshold (ImaAmp, Region, 'max_separability', 'dark', UsedThreshold) 22 | *骨架提取 23 | skeleton (Region,Skeleton) 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /边缘检测/edges_sub_pix亚像素边缘提取.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/flower.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转换到灰度图 14 | rgb1_to_gray (origImg, GrayImage) 15 | *亚像素轮廓xld提取 16 | edges_sub_pix (GrayImage, Edges, 'canny', 1, 20, 40) 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /边缘检测/fit_circle_contour_xld拟合圆形轮廓.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/flower.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度化 14 | rgb1_to_gray (origImg, GrayImage) 15 | *阈值分割 16 | threshold (GrayImage, Regions, 130, 249) 17 | *膨胀 18 | dilation_circle (Regions, RegionDilation, 6.5) 19 | *填充 20 | fill_up (RegionDilation, RegionFillUp) 21 | *获得初始轮廓 22 | gen_contour_region_xld (RegionFillUp, Contours, 'border') 23 | *拟合圆 24 | fit_circle_contour_xld (Contours, 'atukey', -1, 2, 0, 10, 1, Row, Column, Radius, StartPhi, EndPhi, PointOrder) 25 | *生成圆轮廓 26 | gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, rad(360), 'positive', 1) 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /边缘检测/laplace_of_gauss配合zero_crossing检测.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/flower.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *边缘提取 14 | laplace_of_gauss (origImg, ImageLaplace, 1.5) 15 | *过零点检测 16 | zero_crossing (ImageLaplace, RegionCrossing) 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /边缘检测/laplace配合zero_crossing检测.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/flower.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *拉普拉斯边缘检测 14 | laplace (origImg, ImageLaplace, 'signed', 13, 'n_4') 15 | *过零点检测 16 | zero_crossing (ImageLaplace, RegionCrossing) 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /边缘检测/lines_color彩图边缘线段提取.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/flower.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *彩图边缘提取 14 | lines_color (origImg, Lines, 1.5, 3, 50, 'true', 'true') 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /边缘检测/lines_gauss边缘线段提取.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/flower.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *灰度图转化 14 | rgb1_to_gray (origImg, GrayImage) 15 | *边缘线段提取 16 | lines_gauss (GrayImage, Lines, 1.5, 3, 8, 'light', 'true', 'bar-shaped', 'true') 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /边缘检测/sobel_amp索贝尔求梯度.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/flower.jpg') 10 | *根据图打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转为灰度图 14 | rgb1_to_gray (origImg, GrayImage) 15 | *sobel求梯度 16 | sobel_amp (GrayImage, EdgeAmplitude, 'sum_abs', 3) 17 | *阈值分割 18 | threshold (EdgeAmplitude, Regions, 100, 255) 19 | *骨架 20 | skeleton (Regions, Skeleton) 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /边缘检测/xld提取_分割_筛选_连接.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读入图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/shapes.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转化灰度图 14 | rgb1_to_gray (origImg, GrayImage) 15 | *提取亚像素轮廓 16 | edges_sub_pix (GrayImage, Edges, 'canny', 2.5, 20, 40) 17 | *分割xld 18 | segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 2) 19 | *选择xld 20 | select_shape_xld (ContoursSplit, SelectedXLD, 'contlength', 'and', 20, 200) 21 | *连接 22 | union_adjacent_contours_xld (ContoursSplit, UnionContours, 20, 1, 'attr_keep') 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /透视形变图像校正/matrix2DConvert.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *读取图片 7 | read_image (img,'D:/各种学习/语言/halcon/Halcon机器视觉算法原理与编程实战/code/data/display.jpg') 8 | *获得图片的宽高 9 | get_image_size (img, Width, Height) 10 | *建立新的窗口 11 | dev_close_window () 12 | dev_open_window(0, 0, Width, Height, 'black', WindowHandle) 13 | *转化为灰度图 14 | rgb1_to_gray (img, GrayImage) 15 | *阈值分割,提取黑色的屏幕 16 | threshold(GrayImage, DarkRegion, 0, 100) 17 | *寻找连接件 18 | connection (DarkRegion, ConnectedRegions) 19 | *填充 20 | * fill_up (ConnectedRegions, RegionFillUp) 21 | *根据最大面积找到屏幕 22 | select_shape_std(ConnectedRegions, SelectedRegions, 'max_area', 70) 23 | *裁剪,只剩下显示器的屏幕区域 24 | reduce_domain (GrayImage, SelectedRegions, ImageReduced) 25 | *创建边缘轮廓 26 | gen_contour_region_xld (SelectedRegions,Contours,'border') 27 | *分割轮廓为边线 28 | segment_contours_xld (Contours, ContoursSplit, 'lines', 5, 4, 2) 29 | *计算创建的边数目 30 | count_obj (ContoursSplit,num) 31 | *创建容器,储存顶点x/y坐标 32 | XCoordCorners:=[] 33 | YCoordCorners:=[] 34 | *将每条边的顶点储存到容器中 35 | for i:=1 to num by 1 36 | select_obj (ContoursSplit, ObjectSelected, i) 37 | *拟合边 38 | fit_line_contour_xld (ObjectSelected, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist) 39 | *储存顶点x/y 40 | tuple_concat (XCoordCorners,RowBegin,XCoordCorners) 41 | tuple_concat (YCoordCorners,ColBegin,YCoordCorners) 42 | endfor 43 | 44 | *投影变换,为4个特征点与校正后的坐标建立联系 45 | XOFF:=100 46 | YOFF:=100*Height/Width 47 | hom_vector_to_proj_hom_mat2d (XCoordCorners, YCoordCorners, [1,1,1,1], [YOFF,YOFF,Height-YOFF,Height-YOFF],[XOFF,Width-XOFF,Width-XOFF,XOFF], [1,1,1,1], 'normalized_dlt', HomMat2D) 48 | *投影变换 49 | projective_trans_image(img, TransImage, HomMat2D, 'bilinear', 'false', 'false') 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /颜色与纹理/decompose_sub_image分离通道后颜色相减求蓝色.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭设备 7 | dev_close_window () 8 | *读取图片 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/beads.jpg') 10 | *根据图片打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *分离图片 14 | decompose3 (origImg, rChn, gChn, bChn) 15 | *蓝色减去红色图像 16 | sub_image (bChn,rChn,brImageSub, 1, 128) 17 | *再减去绿色 18 | sub_image (brImageSub,gChn,ImageSub, 1, 128) 19 | *阈值分割 20 | threshold (ImageSub, Regions, 230, 255) 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /颜色与纹理/texture_laws纹理滤波器.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | *关闭窗口 7 | dev_close_window () 8 | *读取图像 9 | read_image (origImg,'E:/practice/halcon/material/halcon机器视觉算法原理与编程实践/code/data/cloth.jpg') 10 | *根据图像打开窗口 11 | dev_open_window_fit_image (origImg, 0, 0, -1, -1, WindowHandle) 12 | dev_display (origImg) 13 | *转换到hsv空间 14 | decompose3 (origImg, rChn, gChn, bChn) 15 | trans_from_rgb (rChn, gChn, bChn, hChn, sChn, iChn, 'hsv') 16 | *选取saturation色彩饱和度进行纹理滤波 17 | texture_laws (sChn, ImageTexture, 'ls', 2, 7) 18 | *均值滤波 19 | mean_image (ImageTexture, ImageMean, 11, 11) 20 | *阈值分割 21 | threshold (ImageMean, Regions, 60, 255) 22 | *分离 23 | connection (Regions, ConnectedRegions) 24 | *选择最大面积 25 | select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70) 26 | *闭运算 27 | closing_circle (SelectedRegions, RegionClosing, 11.5) 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /颜色识别/yellowColor.hdev: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dev_close_window () 7 | *读取图片 8 | read_image(Image, 'C:/Users/Public/Documents/MVTec/HALCON-18.11-Progress/examples/images/cable1.png') 9 | *根据图片建立窗口 10 | dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) 11 | *图像转入hsv色彩空间 12 | decompose3 (Image, redChn, greenChn, blueChn) 13 | trans_from_rgb (redChn, greenChn, blueChn, hueChn, saturationChn, intensityChn, 'hsv') 14 | *选出对比度最高的色彩空间进行二值化 15 | threshold (saturationChn, Regions, 122, 255) 16 | *按照轮廓对hue空间裁剪 17 | reduce_domain (hueChn, Regions, ImageReduced) 18 | *再次阈值分割,找到目标位置 19 | threshold (ImageReduced, Regions1, 21, 52) 20 | *断裂链接 21 | connection (Regions1, ConnectedRegions) 22 | *过滤其他小区域,max_area时无视最后的percent 23 | select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 0) 24 | *闭操作 25 | closing_circle (SelectedRegions, yelloRegion, 3.5) 26 | *裁剪出最终区域 27 | reduce_domain (Image,yelloRegion, dstImg) 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | --------------------------------------------------------------------------------