簡介:通過halcon實現ocr識別,嵌入到vc裡,實現呼叫。
vc只是乙個開發環境(舞台),c++是語言,opencv和halcon相當於舞台的道具
opencv和halcon的區別:opencv是乙個庫,包含各種運算元,需要在vc裡配置(告訴聯結器和編譯器當前的位置,動態呼叫庫的運算元);halcon自帶環境,需要在vc裡配置,vc也是呼叫它的庫,匯出相應語言。
模式識別在影象處理的基礎上加入了影象理解,分類器的訓練需要提取影象的特徵點,分類器的種類有神經網路訓練器,svm訓練器等。
1)訓練**如下:
dev_close_window () //首先關閉視窗
dev_open_window (0, 0, 640, 400, 'black', windowhandle) //開啟乙個新的視窗(橫座標,縱座標,寬度,高度,背景顏色,控制代碼)
read_image (image, 'd:/2.bmp') //讀取影象(變數,影象的路徑)
get_image_size (image,width,height) //得到影象的寬度和高度(單位是畫素),顯示在變數視窗中
classes:=['2','0','1','6','0','7','1','3','6','6','1','2','a','1','5','3','6','b']//人工對應,相當於賦值
row1 :=281.1
column1 :=377.5
row2 :=562.7
column2 :=1065.5 //這些是roi座標,目的是製造乙個矩形區域,方便接下來的區域內字元的旋轉
px :=column1+(column2-column1)/2
py :=row1+(row2-row1)/2
gen_rectangle1 (rectangle1,row1,column1,row2,column2)//形成乙個矩形區域
*旋轉text_line_orientation(rectangle1, image, 75, -0.523599, 0.523599, orientationangle)//將影象內的文字資訊進行旋轉,得到旋轉角度,75是字元的高度
hom_mat2d_identity (hommat2didentity) // 生成乙個2d單位矩陣
hom_mat2d_rotate (hommat2didentity, -orientationangle, px, py, hommat2drotate)//生成旋轉矩陣
affine_trans_image (image, rotated, hommat2drotate, 'constant', 'false')//仿射變換,旋正
dots_image (rotated, dotimage, 15, 'dark', 0)//提取暗點
gen_rectangle1 (roi_0, 281.1, 377.5, 562.7, 1065.5)//roi區域
reduce_domain (dotimage, roi_0, imagepart)//提取區域中的內容
threshold(imagepart,region,75,255)//二值化,可以用灰度直方圖調整閾值
* binary_threshold (imagereduced, region, 'max_separability', 'light', usedthreshold)//快速二值化
connection (region, connectedregions1) //把乙個個點連線起來,形成乙個連通域
select_shape (connectedregions1, selectedregions1, 'area', 'and', 4, 500)//選擇面積,選擇所需要的形狀大小
union1 (selectedregions1, regionunion) //單元聯合,形成乙個塊
*閉運算目的把點連起來,形成連通域,容易影象分割
closing_rectangle1(regionunion, regionclosing1, 10,10)//第一次
closing_rectangle1(regionclosing1, regionclosing2, 10, 10)//第二次
gen_rectangle2 (rectangle, 16, 16, rad(45), 7, 0)//形成乙個矩形區域
closing(regionclosing2,rectangle,regionclosing3)//閉運算
gen_rectangle2 (rectangle, 2, 2, rad(145), 8, 0)
closing(regionclosing3,rectangle,regionclosing4)
dilation_circle(regionclosing4,regiondilation,6)//膨脹,為了更好地連線,6為半徑
connection(regiondilation,connectedregions) //把乙個個點連線起來,形成乙個連通域
shape_trans(connectedregions, regiontrans, 'rectangle1')
select_shape (connectedregions, selectedregions, ['width','height'], 'and', [0,23.168], [200,200])//選擇需要的圖形
partition_rectangle (selectedregions, charcandidates, 43, 80)//矩形分割
intersection(charcandidates, region, regionintersection1)//找交集,把字元乙個乙個都提出來
sort_region(regionintersection1, sortedregions, 'character', 'true', 'row')//按字元遞增行排序
count_obj(sortedregions,numintermediate)//計算連通域的數量
dev_display(rotated)//顯示旋轉後的影象
for i:=1 to numintermediate by 1
dev_set_color('red')
select_obj(sortedregions,char,i)
dev_display(char)
intersection(char,region,character)
endfor
2)識別**如下:
intersection(sortedregions,region,characters)//求交集
dev_display(rotated)//顯示旋轉後的影象
dev_set_colored(6)
dev_display(characters)
read_ocr_trainf_names('d:/svm.trf',characternames,charactercount)//讀取訓練的檔案
create_ocr_class_svm(8,10,'constant','default',characternames,'rbf',0.02,0.09,'one-versus-one', 'normalization', 10, ocrhandle)//建立
trainf_ocr_class_svm (ocrhandle, 'd:/svm.trf', 0.001, 'default')//訓練
do_ocr_multi_class_svm (characters, rotated, ocrhandle, class)//識別
smallest_rectangle1(characters,row1, column1, row2, column2)//最小外接矩形
for i:=1 to numintermediate by 1
disp_message(3600,class[i-1],'image',row2[i-1]+100,column1[i-1],'red','false')//顯示字元
endfor
clear_ocr_class_svm(ocrhandle)
stop()
學習計畫 人臉識別(一)
2016年11月25日09 04 21 在這個時間之前,我對人臉識別的認識還是大學的時候學的 數字影象處理 這門課。當時教我的老師是 電路 邱關源第五版 的老師。數字影象處理 使用一些數學函式,對畫素的值進行計算。識別邊界明暗等引數,進而達到影象識別的目的。工作之後,同事研究生期間的 是數字影象處理...
OpenMV學習 顏色識別(一)python
python語法補充 在openmv中實際應用的應該稱為 mircopython 1 匯入模組 第一種 import 模組名 第二種 from 模組名 import 方法名 使用方法如下 import math 匯入math模組 math.floor 呼叫math模組中的floor函式 from m...
一維碼識別(學習用)
讀取 read image image,一維碼.jpg 建立一維碼模型 create bar code model barcodehandle 設定引數 最小對比度250 set bar code param barcodehandle,contrast min 250 設定最小寬度的尺寸2 set...