日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

Halcon的一维码和二维码解码步骤和技巧

發布時間:2023/12/10 ChatGpt 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Halcon的一维码和二维码解码步骤和技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Halcon的一維條碼解碼步驟和解碼技巧

一、圖像預處理和條碼增強
對比度太低:scale_image(或使用外部程序scale_image_range),增強圖像的對比度。

圖像模糊:emphasize銳化圖像,使條碼看起來更清晰。

深色背景上讀取淺色條碼:invert_image反轉圖像。

二、解碼涉及的主要算子
read_image :讀圖

create_bar_code_model :創建條碼模型

find_bar_code :查找條碼

clear_bar_code_model :清除條碼模型

如果條碼非常簡單,那么順次執行上面4個算子就可以完成解碼了。另外還有幾個算子也很重要:

set_bar_code_param :設置解碼時的參數

decode_bar_code_rectangle2 :在指定的矩形區域內解碼

get_bar_code_param :獲取解碼時的參數(如果沒有設置過,則獲得的是默認值)

get_bar_code_result :獲得解碼后的結果,例如可以獲得條碼的類型(Code 128、Code 39等等)

get_bar_code_object :獲得解碼時的一些對象,例如可以獲得解碼后的條碼區域

三、提高解碼能力的其他措施
如果條碼圖像預處理以后,仍舊解碼困難或者解碼率不高,那么可以通過以下措施進一步提高解碼能力:

1、如果整張圖信息太多,則可以先把條碼區域挖出來,使用reduce_domain和crop_domain算子,這樣不僅可以降低解碼難度,還可以減少解碼時間。也可使用decode_bar_code_rectangle2在指定的矩形區域內解碼。

2、可以嘗試把條碼圖像轉正再解碼。(這種操作未經嚴格驗證,不知道是否可以有效提高解碼率)

3、當條碼很密或者很小的時候,可以嘗試用zoom_image_factor放大了條碼圖像。

4、find_bar_code中將“CodeType”設置為“auto”可以讀取多種類型的條碼,但是會增加運行時間,且可能會降低解碼的可靠性。最好只掃描預知的條形碼類型。

5、如果對于質量很差的條碼,可以模擬日常手機掃碼時的操作,即多次改變曝光,多次解碼的方式,參考文章:

https://www.cnblogs.com/xh6300/p/9809692.html

6、通過set_bar_code_param算子設置解碼時的參數,可以有效提高解碼能力。(見下文)

四、set_bar_code_param算子的參數解析

'element_size_min'

條碼的最小尺寸,指條碼寬度和間距,大碼應設大一點,減少處理時間

'element_size_max'

條碼的最大尺寸,不能過小也不能過大

'check_char'

是否驗證校驗位,'absent'不檢查校驗和,'present'檢查校驗和

'persistence'

設置為1,則會保留中間結果,評估條碼印刷質量時會用到

'num_scanlines'

解碼時所用掃描線的最大數目,設置為0表示自動確定,一般設置為2-30

'start_stop_tolerance'

容許誤差值,可設置為'low'或者'high',設置為'high'可能造成誤判

'orientation'、'orientation_tol'

分別指條碼的方向和方向容差,設置準確可大大提高解碼效率

'element_height_min'

條碼的最小高度,默認值-1表示自動推測條碼高度,該參數對速度影響大

'stop_after_result_num'

設置要解碼的個數,0表示全部找出,設置為2表示找到2個就不找了

?

一維碼掃描示例代碼

dev_set_draw ('margin') dev_set_line_width (2)path := 'BarCode'dev_open_window (0, 0, 500, 500, 'black', WindowHandle)list_files (path, ['files','follow_links'], ImageFiles) tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles) for Index := 0 to |ImageFiles| - 1 by 1read_image (Image, ImageFiles[Index])*優化條碼圖像emphasize (Image, Image, 3, 3, 1)scale_image_range (Image, ImageScaled, 30, 220)*創建條碼模型create_bar_code_model ([], [], BarCodeHandle)*設置解碼參數set_bar_code_param (BarCodeHandle, 'element_size_min', 4)set_bar_code_param (BarCodeHandle, 'element_size_max',32)set_bar_code_param (BarCodeHandle,'check_char','present')set_bar_code_param (BarCodeHandle, 'persistence', 1)set_bar_code_param (BarCodeHandle, 'num_scanlines', 10)set_bar_code_param (BarCodeHandle, 'start_stop_tolerance', 'high')set_bar_code_param (BarCodeHandle, 'orientation', 0)set_bar_code_param (BarCodeHandle, 'orientation_tol', 20)set_bar_code_param (BarCodeHandle, 'element_height_min', 100)set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 0)*解碼**decode_bar_code_rectangle2的解碼能力似乎不如find_bar_code,漏掉了一個碼 * smallest_rectangle2 (Rectangle, Row1, Column1, Phi, Length1, Length2) * decode_bar_code_rectangle2 (Image, BarCodeHandle, ['Code 128','Code 39'], Row1, Column1, Phi, Length1, Length2, DecodedDataStrings)* ['Code 128','Code 39']這么寫表示既可以解128碼,也可以解39碼find_bar_code (Image, SymbolRegions1, BarCodeHandle, ['Code 128','Code 39'], BarCodeStrings)get_bar_code_param (BarCodeHandle, 'element_size_min', GenParamValues)get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'symbol_regions')get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)get_bar_code_result (BarCodeHandle, 0, 'quality_isoiec15416', Quality)disp_message (WindowHandle, BarCodeResults + '碼:' + BarCodeStrings, 'image', 20, 20, 'black', 'true')*清除條碼模型clear_bar_code_model (BarCodeHandle)stop () endfor

掃描結果

?

?

Halcon的二維碼解碼步驟和解碼技巧

一、二維碼簡介

1 . 類型多樣,常見的有QR Code二維碼、 Data Matrix二維碼等。

2.高密度編碼,信息容量大。

3.容錯能力強,具有糾錯功能:二維碼因穿孔、污損等引起局部損壞時,照樣可以正確得到識讀,損毀面積達50%仍可恢復信息。?

4.譯碼可靠性高:它比普通條碼譯碼錯誤率百萬分之二要低得多,誤碼率不超過千萬分之一。?

5.可引入加密措施:保密性、防偽性好。?


二、圖像預處理和二維碼增強

對比度太低:scale_image(或使用外部程序scale_image_range),增強圖像的對比度。

圖像模糊:emphasize銳化圖像,使二維碼看起來更清晰。

三、解碼涉及的主要算子

read_image :讀圖

create_data_code_2d_model :創建二維碼模型

find_data_code_2d :查找二維碼

clear_data_code_2d_model :清除二維碼模型


還有幾個算子也值得注意一下:

set_data_code_2d_param :設置解碼時的參數

get_data_code_2d_param :獲取解碼時的參數(如果沒有設置過,則獲得的是默認值)

get_data_code_2d_results :獲得解碼后的一些結果

四、提高解碼能力的其他措施

如果二維碼圖像預處理以后,仍舊解碼困難或者解碼率不高,那么可以通過以下措施進一步提高解碼能力:

1、如果整張圖信息太多,則可以先把二維碼區域挖出來,使用reduce_domain和crop_domain算子,這樣不僅可以降低解碼難度,還可以減少解碼時間。

2、當二維碼很小的時候,可以嘗試用zoom_image_factor放大了二維碼圖像。

3、create_data_code_2d_model ('QR Code', [], [], DataCodeHandleQR)

創建模型時,[ ]中不填內容,實際默認屬性名是‘default_parameters’,默認屬性值是‘standard_recognition’。

如果想大幅度提高解碼成功率,可以將屬性值置為‘enhanced_recognition’或者‘maximum_recognition’。注意:解碼能力越強,解碼時間越長。

4、find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, 'train', 'all', ResultHandles, DecodedDataStrings)?

該算子中的GenParamNames、GenParamValues默認是空的,就是說直接找,找不到拉倒。如果是'train',就是一面找一面調整模板參數。

默認情況下,它只會最多找到1個二維碼。如果想找出更多的二維碼(例如3個),可以這樣:

find_data_code_2d (Image2, SymbolXLDs, DataCodeHandle, 'stop_after_result_num', 3, ResultHandles, DecodedDataStrings)

5、如果對于質量很差的二維碼,可以模擬日常手機掃碼時的操作,即多次改變曝光,多次解碼的方式,參考文章:

https://www.cnblogs.com/xh6300/p/9809692.html

6、通過set_data_code_2d_param算子設置解碼時的參數,可以有效提高解碼能力。(見下文)

五、set_data_code_2d_param算子的參數解析

'default_parameters'

‘standard_recognition’、‘enhanced_recognition’、‘maximum_recognition’

'timeout'

延遲時間,超過這個時間還沒找到就不找了

'polarity'

極性,可設置'dark_on_light'(白色背景黑碼)或者'light_on_dark'

'module_size_min'

最小碼粒像素大小,碼粒大小指的二維碼中矩形顆粒的寬度(存疑)

'module_size_max'

最大碼粒像素大小

?

?

二維碼掃描示例代碼

*輸入參數: *coding:='utf8' 編碼 *path:=圖片路徑 *timeOut:=超時時間 *count:=檢測數量 *輸出參數: *EmptyObject XLD輪廓 *Runtime 耗時 *type_and_data 類型與數據coding:='utf8' path := 'H:/kevin/halcon_workspace/CodeData/image/QRCode/image7' timeOut := 0 count :=100 scal := 1 type_and_data:=[] num:=0 gen_empty_obj (EmptyObject) set_system ('filename_encoding', coding) read_image (Image, path)get_image_size(Image, Width, Height)dev_open_window (0, 0, Width, Height, 'black', WindowHandle)zoom_image_factor(Image,ZoomImage,0.125,0.125,'bilinear') rgb1_to_gray (ZoomImage, GrayImage)dev_display (GrayImage)min_max_gray (GrayImage, GrayImage, 0, Min, Max, Range) Mult := 255.0 / (Max - Min) Add := -Mult * Min scale_image (GrayImage, GrayImage1, Mult, Add) dev_display (GrayImage1) stop()_codeMode:=['Aztec Code', 'Data Matrix ECC 200', 'GS1 Aztec Code', 'GS1 DataMatrix', 'GS1 QR Code', 'Micro QR Code', 'PDF417', 'QR Code'] *創建二維碼數據class模型 count_seconds (T1)create_data_code_2d_model ('QR Code','default_parameters', 'maximum_recognition',DataCodeHandle)*設置超時時間 set_data_code_2d_param (DataCodeHandle, 'timeout', timeOut)*因為某些二維碼模型沒有這個屬性,會報錯所以try以下 try*set_data_code_2d_param (DataCodeHandle, 'strict_quiet_zone', 'yes') catch (Exception)endtry *開始識別 find_data_code_2d (GrayImage,SymbolXLDs,DataCodeHandle, 'stop_after_result_num', count,ResultHandles, DecodedDataStrings) dev_display (Image) dev_display (SymbolXLDs) count_obj (SymbolXLDs, Number) if (Number)*存類型type_and_data[num]:= 'QR Code'num:=num+1for j := 0 to Number-1 by 1*存數據type_and_data[num]:=DecodedDataStrings[j]num:=num+1select_obj (SymbolXLDs, ObjectSelected, j+1)get_contour_xld (ObjectSelected, Row, Col)set_tposition(WindowHandle,(Row[0]-10),Col[0])write_string (WindowHandle, DecodedDataStrings[j])*保存XLD輪廓concat_obj (EmptyObject, ObjectSelected, EmptyObject)endfor endif*清除識別緩存 clear_data_code_2d_model(DataCodeHandle) count_seconds (T2) Runtime:=T2-T1 return ()

掃碼結果:

?

總結

以上是生活随笔為你收集整理的Halcon的一维码和二维码解码步骤和技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。