一、實驗目的
通過OpenCV第五次進行實驗,簡單車牌字符切割。
二、實驗內容
對簡單車牌進行字符切割。
三、實驗過程
我使用的是python語言+openCV來實現簡單車牌字符切割的功能。
1)讀取圖片
使用imread()函數讀取圖片,使用imshow()函數顯示圖片,waitKey()函數含義爲按下任意鍵繼續;
代碼實例:
img = cv2.imread("123456.jpg")
cv2.imshow("img",img)
cv2.waitKey(0)
圖3.1讀取的圖片
2)灰度處理
實例代碼:
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow("gray",gray)
cv2.waitKey(0)
圖3.2灰度處理圖
3)二值化處理
使用threshold()函數進行圖片反色:
實例代碼:
ret,im_fixed=cv2.threshold(gray,50,100,cv2.THRESH_BINARY)
cv2.imshow("im_fixed",im_fixed)
cv2.waitKey(0)
圖3.3二值化處理圖
4)圖像反色
輸入的代碼:
img2 = gray.copy()
cv2.threshold(gray,80,255,0,gray)
for i in range(0,gray.shape[0]):
for j in range(0,gray.shape[1]):
img2[i,j] = 255-gray[i,j] cv2.imshow("img2",img2) cv2.waitKey(0)
圖3.4反色後得到的圖片
5)水平投影
實例代碼:
1 img3 = img2.copy()
2
3 #返回圖像的高和寬
4
5 (h,w)=img3.shape
6
7 #初始化一個跟圖像高一樣長度的數組,用於記錄每一行的黑點個數
8
9 a=[0 for z in range(0,h)]
10
11 for i in range(0,h): #遍歷每一行
12
13 for j in range(0,w): #遍歷每一列
14
15 if img3[i,j]==0: #判斷該點是否爲黑點,0代表黑點
16
17 a[i]+=1 #該行的計數器加一
18
19 img3[i,j]=255 #將其改爲白點,即等於255
20
21 for i in range(0,h): #遍歷每一行
22
23 for j in range(0,a[i]): #從該行應該變黑的最左邊的點開始向最右邊的點設置黑點
24
25 img3[i,j]=0 #設置黑點
26
27 cv2.imshow("shuiping",img3)
28
29 cv2.waitKey(0)
圖3.5水平投影圖
6)垂直投影
實例代碼:
1 img4 = img2.copy()
2
3 #返回圖像的高和寬
4
5 (h,w)=img4.shape
6
7 #初始化一個跟圖像寬一樣長度的數組,用於記錄每一列的黑點個數
8
9 a =[0 for z in range(0,w)]
10
11 for i in range(0,w): #遍歷每一列
12
13 for j in range(0,h): #遍歷每一行
14
15 if img4[j,i]==0: #判斷該點是否爲黑點,0代表是黑點
16
17 a[i]+=1 #該列的計數器加1
18
19 img4[j,i]=255 #記錄完後將其變爲白色,即等於255
20
21 for i in range(0,w): #遍歷每一列
22
23 for j in range(h-a[i],h): #從該列應該變黑的最頂部的開始向最底部設爲黑點
24
25 img4[j,i]=0 #設爲黑點
26
27 cv2.imshow("chuizhi",img4)
28
29 cv2.waitKey(0)
圖3.6垂直投影圖
7)畫矩形
實例代碼:
1 image = img2.copy()
2
3 cv2.rectangle(image, (10,10), (65,120),(0,0,255),1)#設置矩形的各參數依次是:圖片,添加的文字,左上角座標(整數),字體,字體大小,顏色,字體粗細
4
5 cv2.rectangle(image, (75,10), (135,120),(0,0,255), 1)
6
7 cv2.rectangle(image, (160,10), (220,120),(0,0,255), 1)
8
9 cv2.rectangle(image, (225,10), (290,120),(0,0,255), 1)
10
11 cv2.rectangle(image, (300,10), (355,120),(0,0,255), 1)
12
13 cv2.rectangle(image, (360,10), (415,120),(0,0,255), 1)
14
15 cv2.rectangle(image, (420,10), (480,120),(0,0,255), 1)
16
17 cv2.imshow('image',image)
18
19 cv2.waitKey(0)
圖3.7矩形分割
四、實驗總結
學習了OpenCV的切割方法,途中遇到了問題未解決,請老師幫忙檢查一下問題,同時可以鍛鍊自己的能力。