opencv入门---车牌初次定位

opencv入门—车牌初次定位

已经有一段时间没有更新博客,最近在忙着物联网技能大赛的一些准备,利用暑假空闲时间学习了opencv,大致的了解了相关的API的使用,这还只是做着搬砖的学习,要想深入到图像处理领域,还得将冈萨雷斯著作《数字图像处理》全部理解消化,光看书还是没有太大的作用,还得通过不断地实践发现问题,解决问题。

此次的车牌初次定位只针对蓝色车牌,不考虑的环境等外界因素,由于小编水平还不够,没有对轮廓进行漫水填充以及对轮廓进行相应的筛选,仅仅只根据蓝色车牌的颜色特征进行HSV的转化等操作来实现对车牌进行简单的定位。在后期将对该项目进行全面改进,请各位大佬多多指教。

import cv2
import numpy as np
#读取图片函数
def imread_photo(filename,flag):
    return cv2.imread(filename,flag)
#得到mask灰度图像以及mask
def HSV(carboard):
    #对图像进行高斯滤波,将噪声去除
    carboard=cv2.GaussianBlur(carboard,(5,5),0,0)
    hsv=cv2.cvtColor(carboard,cv2.COLOR_BGR2HSV)
    #蓝色值的范围
    minBlue=np.array([100,60,46])
    maxBlue=np.array([124,255,255])
    mask=cv2.inRange(hsv,minBlue,maxBlue)
    blue_img=cv2.bitwise_and(carboard,carboard,mask=mask)
    blue_gray=cv2.cvtColor(blue_img,cv2.COLOR_BGR2GRAY)
    t,blue_gray_binary=cv2.threshold(blue_gray,100,255,cv2.THRESH_BINARY)
    return blue_gray_binary,mask
#将mask图像的轮廓检测出来
def counters(img):
    contours,hierarchy=cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
    return contours,hierarchy
#将彩色图像转化为灰度图像,随及将灰度图像转化为二值图像
def Gray(carboard):
    gray=cv2.cvtColor(carboard,cv2.COLOR_BGR2GRAY)
    #将图像二值化
    t,rst=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
    return rst

#进行形态学操作———开运算(将细小的连通线去除)
def open(image):
    kernel = np.ones((5, 19), np.uint8)
    closingimg = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
    #cv2.imshow("closingimg", closingimg)
    # 进行开运算
    openingimg = cv2.morphologyEx(closingimg, cv2.MORPH_OPEN, kernel)
    # 再次进行开运算
    kernel = np.ones((11, 5), np.uint8)
    openingimg = cv2.morphologyEx(openingimg, cv2.MORPH_OPEN, kernel)
    #开运算
    kernel = np.ones((11, 5), np.uint8)
    openingimg = cv2.morphologyEx(openingimg, cv2.MORPH_OPEN, kernel)
    #闭运算
    kernel = np.ones((5, 19), np.uint8)
    closingimg = cv2.morphologyEx(openingimg, cv2.MORPH_CLOSE, kernel)
    #开运算
    kernel = np.ones((11, 5), np.uint8)
    openingimg = cv2.morphologyEx(closingimg, cv2.MORPH_OPEN, kernel)
    return openingimg
#sobel算子边缘检测
def sobe(image):
    sobel1=cv2.Sobel(image,cv2.CV_64F,1,0)
    return sobel1
#矩形边框的绘制,返回值为左上角x,y坐标,以及x,y方向长度
def bound(count):
    x,y,w,h=cv2.boundingRect(count)
    return  x,y,w,h

if __name__=="__main__":
    carboard=imread_photo('H:\\python\\car.bmp',cv2.IMREAD_COLOR)
    cv2.imshow("original",carboard)
    #carboard_gray=cv.cvtColor(carboard,cv.COLOR_BGR2GRAY)#rgb图像转灰度图像
    #对灰度图像进行高斯滤波,剔除噪声
    carboard_gaussian=cv2.GaussianBlur(carboard,(5,5),0,0)
    #通过转化hsv图像,将蓝色车牌区域筛选出来,找到mask区域
    carboard1,mask=HSV(carboard)
    opening1=open(carboard1)
    counters1,hierarchy=counters(opening1)
    x,y,w,h=bound(counters1[0])
    brcnt=np.array([[[x,y]],[[x+w+3,y]],[[x+w+3,y+h+3]],[[x,y+h+3]]])#四个定位坐标点
    result=cv2.drawContours(carboard,[brcnt],-1,(0,0,255),1)
    cv2.imshow("end",result)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

原图
在这里插入图片描述完成后效果图如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值