C#-Halcon二维码识别

匿名 (未验证) 提交于 2019-12-03 00:27:02

新手学习过程中看历程试着写的。

ihatetheqrcode函数

ihatetheqrcode(ImageIn : Image_Out, Code_Xld : Window_Handle, QrType, Model_Type, Affine_Model, Scal, Multiple, Offset, Time_Out, Noise, Gap : Strings)
参数

输入图像


输出二维码区域

窗口句柄

条码类型,一共8种
该值的一般区间: QrType ≤ 7

创建二维码的匹配模式 1标准 2加强 3最强
该值的一般区间: 1 ≤ Model_Type ≤ 3

斜着扫码 1创建斜扫映射 此后两个tuple为元组 2读取模板进行映射 3不进行映射
该值的一般区间: 1 ≤ Affine_Model ≤ 3

bool类型 表明明亮变化 后两个是变化参数

灰度值乘数 Scal若为false此项不启用
该值的一般区间: 0 ≤ Multiple ≤ 10

灰度值偏移量 Scal若为false此项不启用
该值的一般区间: -1000 ≤ Offset ≤ 1000

扫码超时时间 0-10000ms
该值的一般区间: 0 ≤ Time_Out ≤ 10000

bool类型进行噪声削弱,用的不多

bool类型Gap进行调整,用的不多

返回扫到的码

函数Halcon源码如下












switch(Affine_Model)
case 1:







*进行斜着扫码,在这里进行校正
hom_vector_to_proj_hom_mat2d(Affine_Tuple_X, Affine_Tuple_Y, [1,1,1,1], [50,300,300,50], [50,50,300,300], [1,1,1,1], 'normalized_dlt', HomMat2D)
write_tuple(HomMat2D, 'C:/Users/Administrator/Desktop/Halcon代码/校正二维码')
*变换图像
projective_trans_image(ImageIn, Image1, HomMat2D, 'bilinear', 'false', 'false')
break
case 2:
read_tuple('C:/Users/Administrator/Desktop/Halcon代码/校正二维码', HomMat2D)
*变换图像
projective_trans_image(ImageIn, Image1, HomMat2D, 'bilinear', 'false', 'false')
break
case 3:
Image1:=ImageIn
break
endswitch


*明亮变化
if(Scal)

endif
*噪声变化
if(Noise)

endif
*Gap过大弥补
if(Gap)

endif


switch(Model_Type)

create_data_code_2d_model (SymbolType[QrType], 'default_parameters', 'standard_recognition', DataCodeHandleStandard)
*设置超时时间防止读取时间过长

find_data_code_2d(Image1, Code_Xld, DataCodeHandleStandard, [], [], ResultHandles, DecodedDataStrings)
clear_data_code_2d_model(DataCodeHandleStandard)
break
case 2:
create_data_code_2d_model (SymbolType[QrType], 'default_parameters', 'enhanced_recognition', DataCodeHandleEnhanced)
*设置超时时间防止读取时间过长

find_data_code_2d(Image1, Code_Xld, DataCodeHandleEnhanced, [], [], ResultHandles, DecodedDataStrings)
clear_data_code_2d_model(DataCodeHandleEnhanced)
break
case 3:
create_data_code_2d_model (SymbolType[QrType], 'default_parameters', 'maximum_recognition', DataCodeHandleMaximum)
*设置超时时间防止读取时间过长

find_data_code_2d(Image1, Code_Xld, DataCodeHandleMaximum, [], [], ResultHandles, DecodedDataStrings)
clear_data_code_2d_model(DataCodeHandleMaximum)
break
endswitch
if(|ResultHandles|!=0)

Strings:=DecodedDataStrings
Image_Out:=Image1
else

Strings:=''
endif

return ()

C#使用这个做出的例子或者demo如下,如若不能运行请检查halcon的引用是否正确。

https://download.csdn.net/download/qq_36685891/10478206

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!