一、实验目的
通过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的切割方法,途中遇到了问题未解决,请老师帮忙检查一下问题,同时可以锻炼自己的能力。