新手学习过程中看历程试着写的。
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