领导让用QT把halcon处理的结果做个展示 halcon程序已经写好了 就是检查记录单填写是不是完整(一格三个钩至少要打一格钩,不能漏钩) 不完整界面显示错误
目的是想在QT程序界面打开一幅图然后在一个文本控件上显示‘’完整‘或‘’不完整‘’
刚学QT 环境已经配置好了 不知道halcon导出的cpp代码要复制到哪个程序里
以下是halcon程序 流程就是先画出几十个roi 把17个格子包含五十几个钩区域和两个签名区域截出来 然后用自己的算法检查是否漏钩或者漏签 最后输出文本结果表单是否完整
- read_image(Image, 'C:/Users/PC/Desktop/ocr/原图片集/元器件检查记录单.bmp')
- get_image_size(Image, Width, Height)
- dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
- *框选打钩区域
- gen_rectangle1(r0n1, 171, 329, 185, 343)
- gen_rectangle1(r0n2, 171, 404, 185, 418)
- gen_rectangle1 (r1n1, 244, 703, 258, 717)
- gen_rectangle1 (r1n2, 244, 787, 258, 801)
- gen_rectangle1 (r1n3, 244, 913, 258, 927)
- …………(省略剩下的几十个方框)
- reduce_domain(Image, r0n1, ImageReduced1)
- reduce_domain(Image, r0n2, ImageReduced2)
- reduce_domain(Image, r1n1, ImageReduced3)
- reduce_domain(Image, r1n2, ImageReduced4)
- reduce_domain(Image, r1n3, ImageReduced5)
- reduce_domain(Image, r2n1, ImageReduced6)
- reduce_domain(Image, r2n2, ImageReduced7)
- reduce_domain(Image, r2n3, ImageReduced8)
- ……(同上)
- *这些自定义函数是检查每一格2或3或4或6个钩中内至少要一个打钩,输出结果是result,只有‘ok'或'error'两种情况
- FindTickFrom2 (ImageReduced1, ImageReduced2, Regions, Row, Column, Radius, tuple0, Min, result0)
- FindTickFrom3 (ImageReduced3, ImageReduced4, ImageReduced5, Regions, Row, Column, Radius, tuple1, Min, result1)
- FindTickFrom3 (ImageReduced6, ImageReduced7, ImageReduced8, Regions, Row, Column, Radius, tuple2, Min, result2)
- FindTickFrom3 (ImageReduced9, ImageReduced10, ImageReduced11, Regions, Row, Column, Radius, tuple3, Min, result3)
- FindTickFrom3 (ImageReduced12, ImageReduced13, ImageReduced14, Regions, Row, Column, Radius, tuple4, Min, result4)
- FindTickFrom3(ImageReduced15, ImageReduced16, ImageReduced17, Regions, Row, Column, Radius, tuple5, Min, result5)
- FindTickFrom3 (ImageReduced18, ImageReduced19, ImageReduced20, Regions, Row, Column, Radius, tuple6, Min, result6)
- FindTickFrom3 (ImageReduced21, ImageReduced22, ImageReduced23, Regions, Row, Column, Radius, tuple7, Min, result7)
- FindTickFrom6 (ImageReduced24, ImageReduced25, ImageReduced26, ImageReduced27, ImageReduced28, ImageReduced29, Regions, Row, Column, Radius, tuple8, Min, result8)
- FindTickFrom4 (ImageReduced30, ImageReduced31, ImageReduced32, ImageReduced33, Regions, tuple9, result9)
- FindTickFrom3 (ImageReduced34, ImageReduced35, ImageReduced36, Regions, Row, Column, Radius, tuple10, Min, result10)
- FindTickFrom3 (ImageReduced37, ImageReduced38, ImageReduced39, Regions, Row, Column, Radius, tuple11, Min, result11)
- FindTickFrom3 (ImageReduced40, ImageReduced41, ImageReduced42, Regions, Row, Column, Radius, tuple12, Min, result12)
- FindTickFrom3 (ImageReduced43, ImageReduced44, ImageReduced45, Regions, Row, Column, Radius, tuple13, Min, result13)
- FindTickfrom4 (ImageReduced46, ImageReduced47, ImageReduced48, ImageReduced49, Regions, Row, Column, Radius, tuple14, Min, result14)
- FindTickFrom3 (ImageReduced50, ImageReduced51, ImageReduced52, Regions, Row, Column, Radius, tuple15, Min, result15)
- FindTickFrom2 (ImageReduced53, ImageReduced54, Regions, Row, Column, Radius, tuple16, Min, result16)
- FindTickFrom2 (ImageReduced55, ImageReduced56, Regions, Row, Column, Radius, tuple17, Min, result17)
- dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
- *把17格的检查结果汇总 这17个字符串不是ok就是error
- TickCheckResult:=[result0,result1,result2,result3,result4,result5,result6,result7,result8,result9,result10,result11,result12,result13,result14,result15,result16,result17]
- counterror:=[]
- for i:=0 to 17 by 1
- if (TickCheckResult[i]='error')
- num:=i+1
- disp_message(WindowHandle, '第'+num+'个区域内没有打钩!', 'window', i*4, 10, 'red', 'true')
- counterror:=[counterror,'缺少打钩']
- stop()
- endif
- endfor
- *检查签名区域
- gen_rectangle1 (s1, 1260, 430, 1320, 660)
- gen_rectangle1 (s2,1260,810,1320,1040)
- *自定义检查签名函数,输出结果是result,只有‘ok'或'error'两种情况
- CheckSignatureResult (Image, s1, ImageReduceds1, Regions1, RegionDilation1, result18)
- CheckSignatureResult (Image, s2, ImageReduceds2, Regions2, RegionDilation2, result19)
- CheckSignatureResult:=[result18,result19]
- *如果漏签就报错
- for j:=0 to 1 by 1
- if (CheckSignatureResult[j]='error')
- disp_message(WindowHandle, '缺少签名!', 'window', 30, 30, 'red', 'true')
- counterror:=[counterror,'缺少签名']
- endif
- endfor
- tuple_length(counterror, Length)
- if(Length >0)
- disp_message(WindowHandle, '表单不完整', 'window', 0, 0, 'red', 'true')
- endif
复制代码
|