halcon条形码、二维码识别、opencv识别
- 其他
- 2025-09-01 19:45:02

一、条形码 函数介绍 create_bar_code_model * 1.创建条码读取器的模板 * 参数一:通用参数的名称,针对条形码模型进行调整。默认值为空 * 参数二:针对条形码模型进行调整 * 参数三:条形码模型的句柄。 create_bar_code_model ([], [], BarCodeHandle) set_bar_code_param * 参数一:条形码模型的句柄。 * 参数二:通用参数的名称,针对查找和解码条形码进行了调整 * 参数三:通用参数的值 set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 1) find_bar_code * 3.在图像中读取条码数据和数据区域 * 参数一:要查找的图片 * 参数二:条码数据区域 * 参数三:条码模板句柄 * 参数四:条码类型 * 参数五:读取结果 find_bar_code (ImageReduced2, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings) 效果 代码 * 1.创建条码读取器的模板 * 参数一:通用参数的名称,针对条形码模型进行调整。默认值为空 * 参数二:针对条形码模型进行调整 * 参数三:条形码模型的句柄。 create_bar_code_model ([], [], BarCodeHandle) dev_set_color ('green') dev_set_draw ('margin') * 2.配置解码方式 * 参数一:条形码模型的句柄。 * 参数二:通用参数的名称,针对查找和解码条形码进行了调整 * 参数三:通用参数的值 set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 1) read_image (Image, 'D:/workplace/字符识别/Image_20250114144355733.bmp') gen_rectangle2 (ROI_0, 2704.8, 2530.15, rad(0.89529), 882.925, 59.4154) reduce_domain (Image, ROI_0, ImageReduced2) * 用于将显示窗口的大小调整到适合图像大小的尺寸。 dev_resize_window_fit_image (ImageReduced2, 0, 0, -1, -1) * 3.在图像中读取条码数据和数据区域 * 参数一:要查找的图片 * 参数二:条码数据区域 * 参数三:条码模板句柄 * 参数四:条码类型 * 参数五:读取结果 find_bar_code (ImageReduced2, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings) area_center (SymbolRegions, Area, Row, Column) dev_close_window () dev_open_window (0, 0, 512, 512, 'black', WindowHandle) set_display_font (WindowHandle, 16, 'mono', 'true', 'false') dev_display (Image) dev_display (SymbolRegions) disp_message (WindowHandle, DecodedDataStrings, 'image', Row+200, Column-500, 'black', 'true') 二、二维码 函数介绍: create_data_code_2d_model *创建二维码模型 * 创建二维码模型 * 参数一:二维码类型 * 参数二:通用参数的名称 针对二维数据代码模型进行了调整。 * 参数三:针对二维数据代码模型进行了调整。 * 参数四:数据代码模型的句柄。 create_data_code_2d_model (_codeMode[Index1], 'default_parameters', 'maximum_recognition', DataCodeHandle) find_data_code_2d *检测二维码,最多可以检测到10个 * 查找图形中二维码,并获取信息 * 参数一:图片 * 参数二:围绕成功解码数据的 XLD 轮廓 代码符号。 * 参数三:二维码模型的句柄。 * 参数四:参数的名称 控制操作员的行为。 * 参数五:可选泛型参数的值。 * 参数六:所有成功解码的二维数据代码的句柄 符号。 * 参数七:所有检测到的二维数据代码的解码数据字符串 图像中的符号。 find_data_code_2d (ImageEmphasize, SymbolXLDs, DataCodeHandle, 'stop_after_result_num', 10, ResultHandles, \ DecodedDataStrings) 效果1: 效果2 代码 * 二维码读取 read_image (Image, 'C:/Users/Albert/Desktop/qr/2.bmp') dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) set_display_font (WindowHandle, 16, 'mono', 'true', 'false') *创建二维码类型列表 _codeMode:=['Aztec Code', 'Data Matrix ECC 200', 'GS1 Aztec Code', 'GS1 DataMatrix', \ 'GS1 QR Code', 'Micro QR Code', 'PDF417', 'QR Code'] *图像放大1.5倍 zoom_image_factor (Image, ImageZoomed, 1.5, 1.5, 'constant') *图像锐化 emphasize (ImageZoomed, ImageEmphasize, 20, 20, 1) *遍历二维码类型列表 for Index1 := 0 to |_codeMode| by 1 *创建二维码模型 * 创建二维码模型 * 参数一:二维码类型 * 参数二:通用参数的名称 针对二维数据代码模型进行了调整。 * 参数三:针对二维数据代码模型进行了调整。 * 参数四:数据代码模型的句柄。 create_data_code_2d_model (_codeMode[Index1], 'default_parameters', 'maximum_recognition', DataCodeHandle) *设置超时500ms set_data_code_2d_param (DataCodeHandle, 'timeout', 500) *检测二维码,最多可以检测到10个 * 查找图形中二维码,并获取信息 * 参数一:图片 * 参数二:围绕成功解码数据的 XLD 轮廓 代码符号。 * 参数三:二维码模型的句柄。 * 参数四:参数的名称 控制操作员的行为。 * 参数五:可选泛型参数的值。 * 参数六:所有成功解码的二维数据代码的句柄 符号。 * 参数七:所有检测到的二维数据代码的解码数据字符串 图像中的符号。 find_data_code_2d (ImageEmphasize, SymbolXLDs, DataCodeHandle, 'stop_after_result_num', 10, ResultHandles, \ DecodedDataStrings) *获取当前图像的二维码类型 code_type := _codeMode[Index1] *如果检测到图像有二维码,就显示在窗体上 if (|DecodedDataStrings| > 0) disp_message (WindowHandle, code_type+':'+DecodedDataStrings, 'window', 12, 12, 'black', 'true') endif endfor dev_clear_window () 三、csharpopencv 识别二维码
C#中生成二维码(QR码)与读取二维码内容_c#将字符串生成二维码图片-CSDN博客
实用主义,完全是按照上面这位老哥抄的
gitee如下:
OCRQR: 有百度的飞浆 C# opencv、以及其他开源软件的集合
四、全部代码 * 1.创建条码读取器的模板 * 参数一:通用参数的名称,针对条形码模型进行调整。默认值为空 * 参数二:针对条形码模型进行调整 * 参数三:条形码模型的句柄。 create_bar_code_model ([], [], BarCodeHandle) dev_set_color ('green') dev_set_draw ('margin') * 2.配置解码方式 * 参数一:条形码模型的句柄。 * 参数二:通用参数的名称,针对查找和解码条形码进行了调整 * 参数三:通用参数的值 set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 1) read_image (Image, 'D:/workplace/字符识别/Image_20250114144355733.bmp') gen_rectangle2 (ROI_0, 2704.8, 2530.15, rad(0.89529), 882.925, 59.4154) reduce_domain (Image, ROI_0, ImageReduced2) * 用于将显示窗口的大小调整到适合图像大小的尺寸。 dev_resize_window_fit_image (ImageReduced2, 0, 0, -1, -1) * 3.在图像中读取条码数据和数据区域 * 参数一:要查找的图片 * 参数二:条码数据区域 * 参数三:条码模板句柄 * 参数四:条码类型 * 参数五:读取结果 find_bar_code (ImageReduced2, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings) area_center (SymbolRegions, Area, Row, Column) dev_close_window () dev_open_window (0, 0, 512, 512, 'black', WindowHandle) set_display_font (WindowHandle, 16, 'mono', 'true', 'false') dev_display (Image) dev_display (SymbolRegions) disp_message (WindowHandle, DecodedDataStrings, 'image', Row+200, Column-500, 'black', 'true') * 4.使用完毕,删除条码匹配模板 read_image (Image1111, 'D:/workplace/字符识别/1111.jpg') rgb1_to_gray (Image1111, GrayImage) gen_rectangle1 (ROI_0, 76.0361, 119.731, 257.755, 779.377) reduce_domain (GrayImage, ROI_0, ImageReduced) threshold (ImageReduced, Region, 0, 155) connection (Region, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, ['area','contlength'], 'and', [490.84,114.53], [50000,2051.7]) sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'row') read_ocr_class_mlp ('Document_0-9A-Z_NoRej.omc', OCRHandle) do_ocr_multi_class_mlp (SortedRegions, ImageReduced, OCRHandle, Class, Confidence) *汉字识别 read_image (Image22, 'D:/workplace/字符识别/22.png') rgb1_to_gray (Image22, GrayImage1) gen_rectangle1 (ROI_0, 21.3781, 182.366, 148.383, 1159.65) reduce_domain (GrayImage1, ROI_0, ImageReduced1) threshold (ImageReduced1, Region1, 128, 255) closing_circle (Region1, RegionClosing, 3.5) connection (RegionClosing, ConnectedRegions1) select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 150, 99999) sort_region (SelectedRegions1, SortedRegions1, 'first_point', 'true', 'column') dev_display (ImageReduced1) words:=['国','外','电','子','与','通','信','教','材','系','列'] for Index := 1 to |words| by 1 * 按顺序拿到单个字符 select_obj (SortedRegions1, obj, Index) append_ocr_trainf (obj, ImageReduced1, words[Index-1], 'D:/workplace/字符识别/trainChinese.trf') endfor *读取训练文件 read_ocr_trainf_names ('D:/workplace/字符识别/trainChinese.trf', CharacterNames, CharacterCount) *创建模型 create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle1) * 训练模型 trainf_ocr_class_mlp (OCRHandle1, 'D:/workplace/字符识别/trainChinese.trf', 200, 1, 0.01, Error, ErrorLog) *识别: do_ocr_multi_class_mlp (SortedRegions1, ImageReduced1, OCRHandle1, Class1, Confidence1) * 二维码读取 read_image (Image, 'C:/Users/Albert/Desktop/qr/1.jpg') dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) set_display_font (WindowHandle, 16, 'mono', 'true', 'false') *创建二维码类型列表 _codeMode:=['Aztec Code', 'Data Matrix ECC 200', 'GS1 Aztec Code', 'GS1 DataMatrix', \ 'GS1 QR Code', 'Micro QR Code', 'PDF417', 'QR Code'] *图像放大1.5倍 zoom_image_factor (Image, ImageZoomed, 1.5, 1.5, 'constant') *图像锐化 emphasize (ImageZoomed, ImageEmphasize, 20, 20, 1) *遍历二维码类型列表 for Index1 := 0 to |_codeMode| by 1 *创建二维码模型 * 创建二维码模型 * 参数一:二维码类型 * 参数二:通用参数的名称 针对二维数据代码模型进行了调整。 * 参数三:针对二维数据代码模型进行了调整。 * 参数四:数据代码模型的句柄。 create_data_code_2d_model (_codeMode[Index1], 'default_parameters', 'maximum_recognition', DataCodeHandle) *设置超时500ms set_data_code_2d_param (DataCodeHandle, 'timeout', 500) *检测二维码,最多可以检测到10个 * 查找图形中二维码,并获取信息 * 参数一:图片 * 参数二:围绕成功解码数据的 XLD 轮廓 代码符号。 * 参数三:二维码模型的句柄。 * 参数四:参数的名称 控制操作员的行为。 * 参数五:可选泛型参数的值。 * 参数六:所有成功解码的二维数据代码的句柄 符号。 * 参数七:所有检测到的二维数据代码的解码数据字符串 图像中的符号。 find_data_code_2d (ImageEmphasize, SymbolXLDs, DataCodeHandle, 'stop_after_result_num', 10, ResultHandles, \ DecodedDataStrings) *获取当前图像的二维码类型 code_type := _codeMode[Index1] *如果检测到图像有二维码,就显示在窗体上 if (|DecodedDataStrings| > 0) disp_message (WindowHandle, code_type+':'+DecodedDataStrings, 'window', 12, 12, 'black', 'true') endif endfor dev_clear_window () stop () * 1 读取条形码 * 创建一个条形码处理模型,这里使用默认参数。 create_bar_code_model([], [], BarCodeHandle) * 设置参数,使得在找到第一个条形码后停止搜索,因为我们期望每张图像中只有一个条形码。 set_bar_code_param(BarCodeHandle, 'stop_after_result_num', 1) * 减少最小代码长度到1个字符,因为有些2/5工业条形码可能只有一个数字。 * 注意:在实际应用中不推荐这样做,因为它可能会导致更多的误读。 set_bar_code_param_specific(BarCodeHandle, '2/5 Industrial', 'min_code_length', 1) * 关闭任何已打开的窗口,以确保新窗口可以被正确创建。 dev_close_window() * 打开一个新的图形窗口,用于显示处理结果。 * 参数分别是:窗口的左上角坐标 (0, 0),宽度 (120),高度 (300),背景颜色 ('black'),以及返回的窗口句柄 (WindowHandle)。 dev_open_window(0, 0, 120, 300, 'black', WindowHandle) * 设置显示字体大小为14,字体类型为等宽字体 ('mono'),加粗 ('true'),斜体 ('false')。 set_display_font(WindowHandle, 14, 'mono', 'true', 'false') * 设置绘图模式为边距 ('margin'),这意味着绘制的元素将与窗口边缘保持一定的距离。 dev_set_draw('margin') * 设置线条宽度为3,这将影响绘制的线条或形状的粗细。 dev_set_line_width(3) * 开始循环,迭代4次,每次处理一张不同的条形码图像。 for I := 1 to 4 by 1 * 构造图像文件路径并读取图像,这里的I是一个变量,代表当前迭代的次数。 * 文件名格式为'barcode/25industrial/25industrial0' + I,例如,第一次迭代时会读取'25industrial01'。 read_image(Image, 'barcode/25industrial/25industrial0' + I) * 获取图像的尺寸,以便正确设置显示窗口的范围。 get_image_size(Image, Width, Height) * 设置窗口的显示区域,使图像完整地填充窗口。 dev_set_window_extents(0, 0, Width - 1, Height - 1) * 在窗口中显示图像。 dev_display(Image) * 设置绘制颜色为绿色。 dev_set_color('green') * 配置为不考虑校验字符进行条形码读取。 set_bar_code_param(BarCodeHandle, 'check_char', 'absent') * 尝试找到并解码条形码,返回解码后的字符串。 find_bar_code(Image, SymbolRegions, BarCodeHandle, '2/5 Industrial', DecodedDataStrings) * 显示解码后的字符串。 disp_message(WindowHandle, DecodedDataStrings, 'window', 12, 12, 'black', 'false') * 计算解码字符串的最后一个字符的位置。 LastChar := strlen(DecodedDataStrings) - 1 * 显示最后一个字符,假设这是校验字符,并用森林绿颜色标记。 disp_message(WindowHandle, sum(gen_tuple_const(LastChar,' ')) + DecodedDataStrings{LastChar}, 'window', 12, 12, 'forest green', 'false') * 暂停程序执行,让用户有时间查看结果。 stop() * 现在配置为使用校验字符验证结果。 set_bar_code_param(BarCodeHandle, 'check_char', 'present') * 再次尝试找到并解码条形码,这次包括校验字符的验证。 * 如果校验字符不正确,条形码读取将会失败。 find_bar_code(Image, SymbolRegions, BarCodeHandle, '2/5 Industrial', DecodedDataStrings) * 显示解码后的字符串(不包括校验字符)。 disp_message(WindowHandle, DecodedDataStrings, 'window', 36, 12, 'black', 'false') * 改变绘制颜色为洋红色。 dev_set_color('magenta') * 如果不是最后一张图片,则暂停,等待用户继续。 if (I < 4) stop() endif endforhalcon条形码、二维码识别、opencv识别由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“halcon条形码、二维码识别、opencv识别”