一:基于Halcon的C#条码识别案例分析
read_image (Image, 'C:/Users/Administrator/Desktop/22.jpg')
rgb1_to_gray (Image, GrayImage)
*创建一个二维码数据模型
create_data_code_2d_model ('QR Code','default_parameters', 'maximum_recognition',DataCodeHandle)
*匹配二维码模型,获取数据信息
find_data_code_2d (GrayImage,SymbolXLDs,DataCodeHandle, 'train', 'all',ResultHandles, DecodedDataStrings)
*显示轮廓
dev_set_color ('green')
dev_display (SymbolXLDs)
*删除二维码模型
clear_data_code_2d_model(DataCodeHandle)
二:编写随机二维码程序段,通过生成的二维码图片派发给halcon识别。
随机二维码生成并保存二维码图片 。
private Bitmap GetBarCode()
{
QRCodeEncoder encoder = new QRCodeEncoder();
encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
encoder.QRCodeScale = 7;//大小(值越大生成的二维码图片像素越高)
encoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级) //encoder.QRCodeForegroundColor = Color.Green;
string qrdata = Guid.NewGuid().ToString("N");
Bitmap bcodeBitmap = encoder.Encode(qrdata.ToString(), Encoding.UTF8);
imgName = Guid.NewGuid().ToString("N");
bcodeBitmap.Save(@"C:\Users\Administrator\Desktop\barcode\" + imgName + ".png", ImageFormat.Png);
//bcodeBitmap.Dispose();
return bcodeBitmap;
}
三:读取图片到hWindowControl界面
private void loadimg(string imgpath)
{
HObject h_img;
HTuple h_width = null;
HTuple h_height = null;
HOperatorSet.ReadImage(out h_img, imgpath);
HOperatorSet.GetImageSize(h_img, out h_width, out h_height);
HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, h_height + 1, h_width + 1);
HOperatorSet.DispObj(h_img, hWindowControl1.HalconWindow);
h_img.Dispose();
}
四:halcon解码并返回SN结果.
public void action(string path,out string sn)
{
// Local iconic variables
HObject ho_Image, ho_GrayImage, ho_SymbolXLDs;
// Local control variables
HTuple hv_DataCodeHandle = null, hv_ResultHandles = null;
HTuple hv_DecodedDataStrings = null;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.GenEmptyObj(out ho_GrayImage);
HOperatorSet.GenEmptyObj(out ho_SymbolXLDs);
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, path);
ho_GrayImage.Dispose();
HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
//创建一个二维码数据模型
HOperatorSet.CreateDataCode2dModel("QR Code", "default_parameters", "maximum_recognition",
out hv_DataCodeHandle);
//匹配二维码模型,获取数据信息
ho_SymbolXLDs.Dispose();
HOperatorSet.FindDataCode2d(ho_GrayImage, out ho_SymbolXLDs, hv_DataCodeHandle,
"train", "all", out hv_ResultHandles, out hv_DecodedDataStrings);
//显示轮廓
sn = hv_DecodedDataStrings;
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_SymbolXLDs, HDevWindowStack.GetActive());
}
//删除二维码模型
HOperatorSet.ClearDataCode2dModel(hv_DataCodeHandle);
ho_Image.Dispose();
ho_GrayImage.Dispose();
ho_SymbolXLDs.Dispose();
}
大概实现就这样了。