• Python OpenCV 实现车牌号的简单切割(画矩形,设置画笔颜色)


    一、实验目的

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

  • 相关阅读:
    bzoj1257
    bzoj1833
    bzoj3505
    bzoj2226
    bzoj1263
    bzoj2429
    bzoj1854
    bzoj3555
    bzoj1877
    放两个模版
  • 原文地址:https://www.cnblogs.com/CJR-QYF/p/12521436.html
Copyright © 2020-2023  润新知