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

  • 相关阅读:
    static生命周期
    VS2008 JS调试和Silverlight 后台代码调试 相互影响的问题。自己做实例证明
    思考记跳出以往的自己
    javascript setAttribute使用方法 查缺补漏
    克服浮躁,踏实工作,控制自我
    DES加密GUID+文件名称,关于DES加密后文件长度是否超过WINDOWS文件命名规定长度255个字节。
    阅读WPF揭秘前两章探索Silverlight运行的基本原理和RIA工作流程的密码()
    Silverlight运行原理经典问答。
    HTML 实用标签 (你不知道的HTML)
    ASP.NET项目整合 (Silverlight 和 WEB Service ) 过程及原理
  • 原文地址:https://www.cnblogs.com/CJR-QYF/p/12521436.html
Copyright © 2011-2022 走看看