opencv-python车牌颜色判断

本文介绍了一种通过HSV颜色空间阈值来识别车牌颜色的Python方法。针对蓝色、黄色和绿色车牌,定义了HSV阈值范围,然后将图像转换为HSV空间并创建掩膜。通过对掩膜中白色像素点的计数,确定哪种颜色的车牌占比最高,从而识别车牌颜色。虽然该方法有效,但存在遍历像素点导致效率低下的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在截取出车牌区域之后,我们需要判断车牌是什么颜色。
我的思路是:根据不同颜色的hsv阈值取掩膜,掩膜得到的白色像素值最大的就是对应的颜色。

取hsv颜色的阈值参考我之前的博客:Opencv+python打开摄像头或对图片拖动滑动条取颜色阈值
主要区分3种颜色的车牌:蓝色、黄色和绿色
得到的阈值如下:

lower_blue = np.array([100, 43, 46])
upper_blue = np.array([124, 255, 255])
lower_yellow = np.array([15, 55, 55])
upper_yellow = np.array([50, 255, 255])
lower_green = np.array([0, 3, 116])
upper_green = np.array([76, 211, 255])

代码如下:

import cv2
import numpy as np

# img_path = cv2.imread('./rest/yellow.png')
# img_path = cv2.imread('./rest/blue.jpg')
img_path = cv2.imread('./rest/green.jpg')
cv2.imshow('origin', img_path)

height = img_path.shape[0]
width = img_path.shape[1]
print('面积:', height * width)


# 设定阈值
lower_blue = np.array([100, 43, 46])
upper_blue = np.array([124, 255, 255])
lower_yellow = np.array([15, 55, 55])
upper_yellow = np.array([50, 255, 255])
lower_green = np.array([0, 3, 116])
upper_green = np.array([76, 211, 255])

# 转换为HSV
hsv = cv2.cvtColor(img_path, cv2.COLOR_BGR2HSV)

# 根据阈值构建掩膜
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)
mask_yellow = cv2.inRange(hsv, lower_yellow, upper_yellow)  #
mask_green = cv2.inRange(hsv, lower_green, upper_green)  #

# 对原图像和掩膜进行位运算
# src1:第一个图像(合并的第一个对象)src2:第二个图像(合并的第二个对象)mask:理解为要合并的规则。
res_blue = cv2.bitwise_and(img_path, img_path, mask=mask_blue)
res_yellow = cv2.bitwise_and(img_path, img_path, mask=mask_yellow)
res_green = cv2.bitwise_and(img_path, img_path, mask=mask_green)

# 显示图像
# cv2.imshow('frame', img_path)
cv2.imshow('mask_blue', mask_blue)
cv2.imshow('mask_yellow', mask_yellow)
cv2.imshow('mask_green', mask_green)
# cv2.imshow('res', res)

# 对mask进行操作--黑白像素点统计  因为不同颜色的掩膜面积不一样
# 记录黑白像素总和

blue_white = 0
blue_black = 0
yellow_white = 0
yellow_black = 0
green_white = 0
green_black = 0

# 计算每一列的黑白像素总和
for i in range(width):
    for j in range(height):
        if mask_blue[j][i] == 255:
            blue_white += 1
        if mask_blue[j][i] == 0:
            blue_black += 1
        if mask_yellow[j][i] == 255:
            yellow_white += 1
        if mask_yellow[j][i] == 0:
            yellow_black += 1
        if mask_green[j][i] == 255:
            green_white += 1
        if mask_green[j][i] == 0:
            green_black += 1

print('蓝色--白色 = ', blue_white)  
print('蓝色--黑色 = ', blue_black) 
print('黄色--白色 = ', yellow_white)  
print('黄色--黑色 = ', yellow_black)  
print('绿色--白色 = ', green_white)
print('绿色--黑色 = ', green_black) 

color_list = ['蓝色','黄色','绿色']
num_list = [blue_white,yellow_white,green_white]

print('车牌的颜色为:',color_list[num_list.index(max(num_list))])

cv2.waitKey(0)

测试1:
在这里插入图片描述

在这里插入图片描述
测试2:
在这里插入图片描述
在这里插入图片描述
测试3:
在这里插入图片描述
在这里插入图片描述
可以看到,这种方法基本能比较好地区分颜色,但缺点是需要遍历每个像素点,而且3种颜色就遍历3次,这是比较低效的,目前暂时没想其他的方法,就先余着吧。

由于车牌颜色识别涉及到图像处理和机器学习等多个领域,因此编写一个完整的车牌颜色识别算法需要进行多个步骤的处理。下面介绍一种基于MATLAB环境的车牌颜色识别算法: 1. 图像读取与预处理 首先,使用MATLAB的imread函数读取车牌图像,并用imresize函数将图像缩放到一个固定的大小。然后,使用RGB2HSV函数将图像转换为HSV颜色空间,以便更好地处理颜色信息。接着,使用imadjust函数对亮度进行调整,以便更好地提取车牌颜色信息。 2. 特征提取 对于HSV颜色空间中的每个像素,可以提取其色相、饱和度和亮度三个特征。针对车牌颜色识别,我们可以使用饱和度和亮度两个特征进行分类。具体来说,可以计算车牌图像中所有像素的饱和度和亮度的平均值和方差,作为车牌颜色的特征向量。 3. 分类器设计与训练 基于车牌颜色的特征向量,可以使用机器学习算法设计一个分类器,将车牌颜色分类为蓝色、黄色或绿色。常用的分类算法包括支持向量机(SVM)、人工神经网络(ANN)和决策树(DT)等。在MATLAB中,可以使用相关工具箱(如Statistics and Machine Learning Toolbox)来实现这些算法。训练数据集可以从网络上下载,也可以自行采集。 4. 车牌颜色识别 完成分类器的训练后,我们可以将车牌图像的特征向量输入到分类器中进行分类。根据分类器的输出结果,即可得到车牌颜色。最后,可以使用MATLAB的imshow函数将识别结果显示在屏幕上。 总体来说,车牌颜色识别算法需要综合运用图像处理、机器学习等多个领域的知识,具有一定的复杂性。需要注意的是,算法的准确性和鲁棒性需要在实际应用中进行测试和改进,以便更好地适应不同的环境和场景。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值