Halcon 車牌識別-超精細教程

車牌示例

?流程:

  • 讀取圖片轉灰度圖
  • 閾值分割,找車牌內容
  • 將車牌位置設置變換區域形狀
  • 找到中心點和弧度
  • 利用仿射變換,斜切
  • 車牌旋轉轉正,把車牌摳出來
  • 利用形態學操作
  • 拼接車牌號數字
  • 訓練ocr開始識別中文車牌

?本文章用到的算子(解析)

Halcon 算子-承接車牌識別-CSDN博客

rgb1_to_gray? 轉灰度圖

threshold? 閾值分割

connection? 將圖像進行分割多張

select_shape? 特征閾值

shape_trans? ?變換區域形狀

area_center? ? 取區域面積和中心

orientation_region? ?區域方向

vector_angle_to_rigid? 計算平移和旋轉仿射變換關系的變換矩陣

hom_mat2d_slant? ?斜切

affine_trans_region? 仿射變換區域

affine_trans_Image? 圖像仿射變換

reduce_domain? ? 取域圖像

opening_circle? ?使用圓形結構的開運算

sort_region? ? ?排序區域

select_obj? ? ? ? 選中組中對象

union2? ? ? ? ? ? ?計算兩區域并集

gen_empty_oj? ? 創建空對象

concat_obj? ? ? ? 合并元組

write_ocr_trainf? ? ?寫OCR訓練文件

read_ocr_trainf_names? ?讀OCR訓練文件名

create_ocr_class_mlp? ? ? 創建OCR多層感知器

trainf_ocr_class_mlp? ? ? ? 從文件訓練OCR多層感知器

write_ocr_class_mlp? ? ? ? 寫OCR多層感知器

read_ocr_class_mlp? ? ? ?讀OCR多層感知器

do_ocr_multi_class_mlp? ?執行OCR多層感知器多分類

set_tposition? ? ? ? ? ? 設置文本光標位置

?1、關閉數據、窗體

dev_update_off ()
dev_close_window ()

2、讀取圖片、打開窗體

read_image (Image, 'F:/Halcon/?Image/車牌.jpg')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)

3、處理圖片-find車牌

rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 76, 100)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 8600, 10000)

?效果? ?threshold? ? connection? ? ? select_shape

?4、處理圖片-變換區域形狀

shape_trans (SelectedRegions, RegionTrans, 'rectangle2')

5、取區域面積和中心

area_center (RegionTrans, Area, Row, Column)

6、旋轉仿射變換、斜切、旋轉、摳圖

orientation_region (RegionTrans, Phi)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(0), HomMat2D)
hom_mat2d_slant (HomMat2D, rad(15), 'x', Column, Row, HomMat2DSlant)
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2DSlant, 'nearest_neighbor')
affine_trans_image (Image, ImageAffineTrans, HomMat2DSlant, 'constant', 'false')
reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced)

效果:? 斜切區域? ?斜切圖像? ?旋轉糾正后區域

?7、轉灰度圖,進行形態學操作,閾值操作,進行排序

rgb1_to_gray (ImageReduced, GrayImage1)
threshold (GrayImage1, Regions1, 172, 255)
opening_circle (Regions1, RegionOpening, 1.5)
closing_circle (Regions, RegionClosing, 1.7) 注意這個知識做個對比
connection (RegionOpening, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 19.97, 600)
sort_region (SelectedRegions1, SortedRegions, 'character', 'true', 'column')

?

?這是分成多區域的蘇字也被分割多個了,所以下面要進行合并

8、組裝車牌號蘇字

select_obj (SortedRegions, ObjectSelected1, 1)
select_obj (SortedRegions, ObjectSelected2, 2)
select_obj (SortedRegions, ObjectSelected3, 3)
union2 (ObjectSelected1, ObjectSelected2, RegionUnion)
union2 (RegionUnion, ObjectSelected3, RegionUnion1)
select_obj (SortedRegions, ObjectSelected4, 4)
select_obj (SortedRegions, ObjectSelected5, 5)
select_obj (SortedRegions, ObjectSelected6, 6)
select_obj (SortedRegions, ObjectSelected7, 7)
select_obj (SortedRegions, ObjectSelected8, 8)
select_obj (SortedRegions, ObjectSelected9, 9)

?

?

9、將上面零散的車牌號進行拼接

gen_empty_obj (EmptyObject)
concat_obj (EmptyObject, RegionUnion1, EmptyObject)
concat_obj (EmptyObject, ObjectSelected4, EmptyObject)
concat_obj (EmptyObject, ObjectSelected5, EmptyObject)
concat_obj (EmptyObject, ObjectSelected6, EmptyObject)
concat_obj (EmptyObject, ObjectSelected7, EmptyObject)
concat_obj (EmptyObject, ObjectSelected8, EmptyObject)
concat_obj (EmptyObject, ObjectSelected9, EmptyObject)

?

?10、創建訓練文件并讀取

TrainFile:='./Charactor.trf'
Words:=['蘇','E','C','6','2','N','8']
write_ocr_trainf (EmptyObject, GrayImage1, Words, TrainFile)
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
create_ocr_class_mlp (8, 10, 'constant', 'default',  CharacterNames, 80, 'none', 10, 42, OCRHandle)
trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)

11、訓練omc開始識別

read_ocr_class_mlp ('./Charactor.omc', OCRHandle1)
do_ocr_multi_class_mlp (EmptyObject, GrayImage1, OCRHandle1, Class, Confidence)
dev_clear_window ()
dev_set_color ('red')
set_display_font (WindowHandle,30, 'mono', 'true', 'false')
for Index:=0 to |Class|-1 by 1set_tposition (WindowHandle, 30, 120+40*Index)write_string (WindowHandle, Class[Index]) 
endfor


全部代碼?

dev_update_off ()
dev_close_window ()
*讀取圖片
read_image (Image, 'F:/Halcon/?Image/車牌.jpg')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
* 處理圖片 - 定位車牌
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 76, 100)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 8600, 10000)
* 處理圖像-轉正
shape_trans (SelectedRegions, RegionTrans, 'rectangle2')
* 找到中心點
area_center (RegionTrans, Area, Row, Column)
*找弧度
orientation_region (RegionTrans, Phi)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(0), HomMat2D)
hom_mat2d_slant (HomMat2D, rad(15), 'x', Column, Row, HomMat2DSlant)
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2DSlant, 'nearest_neighbor')
affine_trans_image (Image, ImageAffineTrans, HomMat2DSlant, 'constant', 'false')
reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced)
* 開始識別 圖片處理    蘇字拼接
rgb1_to_gray (ImageReduced, GrayImage1)
threshold (GrayImage1, Regions1, 172, 255)
opening_circle (Regions1, RegionOpening, 1.5)
closing_circle (Regions, RegionClosing, 1.7)
connection (RegionOpening, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 19.97, 600)
sort_region (SelectedRegions1, SortedRegions, 'character', 'true', 'column')
* 組裝蘇字區域
select_obj (SortedRegions, ObjectSelected1, 1)
select_obj (SortedRegions, ObjectSelected2, 2)
select_obj (SortedRegions, ObjectSelected3, 3)
union2 (ObjectSelected1, ObjectSelected2, RegionUnion)
union2 (RegionUnion, ObjectSelected3, RegionUnion1)
select_obj (SortedRegions, ObjectSelected4, 4)
select_obj (SortedRegions, ObjectSelected5, 5)
select_obj (SortedRegions, ObjectSelected6, 6)
select_obj (SortedRegions, ObjectSelected7, 7)
select_obj (SortedRegions, ObjectSelected8, 8)
select_obj (SortedRegions, ObjectSelected9, 9)
**把所有區域保存一個對象
gen_empty_obj (EmptyObject)
concat_obj (EmptyObject, RegionUnion1, EmptyObject)
concat_obj (EmptyObject, ObjectSelected4, EmptyObject)
concat_obj (EmptyObject, ObjectSelected5, EmptyObject)
concat_obj (EmptyObject, ObjectSelected6, EmptyObject)
concat_obj (EmptyObject, ObjectSelected7, EmptyObject)
concat_obj (EmptyObject, ObjectSelected8, EmptyObject)
concat_obj (EmptyObject, ObjectSelected9, EmptyObject)
****創建訓練文件
TrainFile:='./Charactor.trf'
Words:=['蘇','E','C','6','2','N','8']
* 完成圖像與字符訓練對應關系
write_ocr_trainf (EmptyObject, GrayImage1, Words, TrainFile)
* 讀取訓練文件
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
* 創建一個分類識別器
create_ocr_class_mlp (8, 10, 'constant', 'default',  CharacterNames, 80, 'none', 10, 42, OCRHandle)
* 訓練分類識別器
trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)
* 保存分類文件
*write_ocr_class_mlp (OCRHandle, './Charactor.omc')
**訓練omc開始識別帶中文車牌
read_ocr_class_mlp ('./Charactor.omc', OCRHandle1)
do_ocr_multi_class_mlp (EmptyObject, GrayImage1, OCRHandle1, Class, Confidence)
dev_clear_window ()
dev_set_color ('red')
set_display_font (WindowHandle,30, 'mono', 'true', 'false')
for Index:=0 to |Class|-1 by 1set_tposition (WindowHandle, 30, 120+40*Index)write_string (WindowHandle, Class[Index]) 
endfor

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896941.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896941.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896941.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UDP透傳程序

UDP透傳程序 本腳本用于在 設備 A 和 設備 B 之間建立 UDP 數據轉發橋梁,適用于 A 和 B 設備無法直接通信的情況。 流程: A --> 電腦 (中繼) --> B B --> 電腦 (中繼) --> A 需要修改參數: B_IP “192.168.1.123” # 設備 B 的…

Holtek HT82V42A深度解析:CCD/CIS信號處理的集成化解決方案

——簡化圖像采集系統設計的終極利器 一、HT82V42A核心參數與外設資源 HT82V42A是Holtek專為圖像傳感器信號處理設計的模擬前端芯片,集成CCD/CIS信號處理與LED驅動功能,關鍵參數如下: 參數類別規格說明信號處理通道單通道CCD/CIS模擬信號輸…

詳細分析KeepAlive的基本知識 并緩存路由(附Demo)

目錄 前言1. 基本知識2. Demo2.1 基本2.2 拓展2.3 終極 3. 實戰 前言 🤟 找工作,來萬碼優才:👉 #小程序://萬碼優才/r6rqmzDaXpYkJZF 基本知識推薦閱讀:KeepAlive知識點 從實戰中學習,源自實戰中vue路由的…

記一次誤禁用USB導致鍵盤鼠標失靈的修復過程

背景說明 在電腦上插入了一個USB hub,然后彈窗提示:“集線器端口上出現電涌”,點開讓選擇“重置”或者“關閉”,不小心點了關閉,結果這個usb口就被關了,再插任何東西都沒反應,找了很多辦法都恢…

小米手機如何錄制屏幕?手機、電腦屏幕錄制方法分享

大家最近有沒有遇到想記錄手機屏幕操作的情況? 比如精彩的游戲瞬間、有趣的視頻教程,或者需要錄制屏幕來制作演示材料。小米手機在這方面可是個好幫手,今天就來給你好好嘮嘮,小米手機如何錄制屏幕,以及后續如何處理這…

如何將JAR交由Systemctl管理?

AI越來越火了,我們想要不被淘汰就得主動擁抱。推薦一個人工智能學習網站,通俗易懂,風趣幽默,最重要的屌圖甚多,忍不住分享一下給大家。點擊跳轉到網站 廢話不多說,進入正題。下面開始說如何使用 systemctl…

chrome Vue.js devtools 提示不支持該擴展組件,移除

可能是版本不兼容,可以重新安裝,推薦網址極簡插件官網_Chrome插件下載_Chrome瀏覽器應用商店 直接搜索vue,下載舊版,vue2、vue3都支持,上面那個最新版本試了下,vue2的肯定是不能用

【RabbitMQ】RabbitMQ的核心概念與七大工作模式

🔥個人主頁: 中草藥 🔥專欄:【中間件】企業級中間件剖析 在現代分布式系統和微服務架構中,消息隊列(Message Queue) 是解決服務間通信、系統解耦和流量削峰的關鍵技術之一。而 RabbitMQ 作為一…

SQLAlchemy系列教程:理解SQLAlchemy元數據

SQLAlchemy是Python開發人員的強大ORM工具。SQLAlchemy中的元數據是對象-關系映射配置的集合,允許開發人員無縫地定義和使用數據庫模式。 使用元數據 SQLAlchemy中的元數據充當各種數據庫描述符(如表、列和索引)的容器。這使開發人員能夠通…

MacDroid for Mac v2.3 安卓手機文件傳輸助手 支持M、Intel芯片 4.7K

MacDroid 是Mac毒搜集到的一款安卓手機文件傳輸助手,在Mac和Android設備之間傳輸文件。您只需要將安卓手機使用 USB 連接到 Mac 電腦上即可將安卓設備掛載為本地磁盤,就像編輯mac磁盤上的文件一樣編輯安卓設備上的文件,MacDroid支持所有 Andr…

Android+SpringBoot的老年人健康飲食小程序平臺

感興趣的可以先收藏起來,還有大家在畢設選題,項目以及論文編寫等相關問題都可以給我留言咨詢,我會一一回復,希望幫助更多的人。 系統介紹 我將從經濟、生活節奏、技術融合等方面入手,詳細闡述居家養老管理模式興起的…

【星云 Orbit ? STM32F4】10. 在串口接收中斷里即時解析數據頭的程序框架

【星云 Orbit ? STM32F4】10. 串口中斷中即時解析數據頭的程序開發:實現高效實時數據處理 摘要 在嵌入式開發中,串口中斷處理是實現高效實時數據傳輸的關鍵技術之一。本文將詳細介紹如何在STM32F407微控制器上開發一個在串口接收中斷中即時解析數據頭的…

數據倉庫的特點

數據倉庫的主要特點可以概括為:面向主題、集成性、非易失性、時變性、高性能和可擴展性、支持復雜查詢和分析、分層架構以及數據質量管理。 1. 面向主題(Subject-Oriented) 數據倉庫是面向主題的,而不是面向事務的。這意味著數據…

SAP MDG —— MDG on S/4HANA 2023 FPS03 創新匯總

文章目錄 MDG 基于SAP S/4HANA 2023 FPS03的創新BP/C/S:消息控制BP/C/S:手工分配數據控制者MDG-F:使用S/4擴展數據校驗功能生成式AI可用于協助自定義對象的數據變更/同時可總結批量變更的內容 MDG 基于SAP S/4HANA 2023 FPS03的創新 由于從S…

抽獎系統(從0-1)(上)

hu項目的開發流程介紹 1. 項目啟動階段 ? 項?概述:介紹項?的背景、?標和預期成果。 ? 團隊組建:建跨職能團隊,包括產品經理、UI/UX 設計師、開發?員、測試?員等。 ? ??定義:明確團隊中各個??的職責和?作內容。 2. 需…

vim 調整字體

vim: 在vim 面板單擊右鍵,選擇references: terminal :也是單擊右鍵,選擇references:

UniApp 使用 u-loadmore 完整步驟

文章目錄 一、前期準備1. 安裝 uView - UI 二、使用 u-loadmore組件1. 創建頁面2. 編寫頁面代碼模板部分(loadmore-demo.vue)樣式部分腳本部分 三、要點補充1. u-loadmore 狀態說明2. 數據請求優化3. 性能優化4. 兼容性問題 在 UniApp 開發中&#xff0c…

Libgdx游戲開發系列教程(3)——通過柏林噪音算法地圖隨機地形

在B站刷到了隨機地圖生成的視頻,隨手學習下并做下記錄 注: 本篇使用javafx應用作演示,算是了解這個算法的使用,后續會再出篇libgdx生成地圖的示例 說明 拋開算法實現,首先認知柏林噪音算法 一般我們想要隨機數,會指定個范圍,如0.0-1.0之間任意小數,而柏林算法的結果范圍就是[…

LeetCode熱題100JS(20/100)第四天|?41. 缺失的第一個正數?|?73. 矩陣置零?|?54. 螺旋矩陣?|?48. 旋轉圖像?

41. 缺失的第一個正數 題目鏈接:41. 缺失的第一個正數 難度:困難 刷題狀態:1刷 新知識: 解題過程 思考 示例 1: 輸入:nums [1,2,0] 輸出:3 解釋:范圍 [1,2] 中的數字都在數組中…

e2studio開發RA2E1(17)---- ADC掃描多通道采樣

e2studio開發RA2E1.17-- ADC掃描多通道采樣 概述視頻教學樣品申請硬件準備參考程序源碼下載ADC屬性配置回調函數主程序演示結果 概述 在嵌入式系統中,ADC(模數轉換器)是一個非常重要的組件,它將模擬信號轉換為數字信號。為了提高…