├── .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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------