使用Python和OpenCV在图像中识别颜色

使用Python和OpenCV在图像中识别颜色

在计算机视觉和图像处理中,识别图像中的颜色是一个常见的任务。它有广泛的应用,如对象检测,图像分割和图像检索。在本文中,我们将介绍如何使用Python和OpenCV确定图像中的颜色。

OpenCV是一种流行的计算机视觉库,它是用C/C++编写的,并具有Python的绑定。OpenCV提供了易于操作的颜色空间,是开源的并提供了各种有用的图像处理算法。

在识别图像中的颜色之前,让我们了解一些常见的图像表示方法。在数字图像中,颜色通常使用RGB(红,绿,蓝)颜色模型表示,该模型中每种颜色根据某个值作为三种基本颜色红,绿和蓝的组合来表示。这些值的范围从0到255,其中255是最大贡献,0是最小贡献。

使用OpenCV进行颜色识别

色彩直方图是使用在特定颜色中出现的像素数将图像中的颜色分布表示为直方图。通过研究该直方图,我们可以了解图像的主要颜色。

  • 我们可以将颜色分类为不同的颜色类别,并通过它制作颜色直方图以分析颜色。

  • 要创建此直方图,我们需要将图像从RGB颜色空间转换为另一个颜色空间,如色度饱和度和值颜色空间(HSV)。

  • 将图像转换为HSV颜色空间后,我们将创建给定图像的色调分量的直方图。

  • 色调分量将表示图像的实际颜色信息,而饱和度和值分量将表示颜色的亮度和强度。

使用OpenCV进行颜色识别

让我们看看如何使用Python和OpenCV在图像中执行颜色识别的步骤。

第1步:导入所需的库

为了在BGR和RGB颜色空间之间转换图像,我们需要导入所需的库。我们将使用以下库−

  • OpenCV − 用于读取和操作图像。

  • Matplotlib − 用于显示图像。

import cv2
import numpy as np

第2步:加载图像并将其转换为HSV颜色空间

现在,我们将加载图像并将其转换为HSV颜色空间。

img = cv2.imread('image.jpg')
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

第3步:定义颜色范围

我们需要定义我们想要检测的颜色范围的下限和上限。我们可以使用OpenCV的inRange()函数提取颜色范围内的像素。

lower_range = (0, 50, 50) #HSV中红色颜色的下限值
upper_range = (10, 255, 255) #HSV中红色颜色的上限值
mask = cv2.inRange(hsv_image, lower_range, upper_range)

第4步:将掩码应用于图像

我们可以将我们在前一步获得的掩码应用于原始图像,以提取仅在颜色范围内的像素。

color_image = cv2.bitwise_and(image, image, mask=mask)

第5步:显示彩色图像

最后,我们可以显示仅包含指定颜色范围内的像素的彩色图像。

# 显示彩色图像
cv2.imshow('Color Image', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Example

import cv2
import numpy as np
img = cv2.imread('image_red.jpg') # 导入含有红色的图片
cv2.imshow('Original Image', img) # 显示原始图片
cv2.waitKey(0) # 等待任意按键
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 把图片转化为HSV格式

# 红色在HSV格式中的下限
lower_range = (0, 50, 50)

# 红色在HSV格式中的上限
upper_range = (150, 255, 255)
mask = cv2.inRange(hsv_img, lower_range, upper_range) # 二值化处理图片
color_image = cv2.bitwise_and(img, img, mask=mask) # 与原图进行按位与操作,显示颜色

# 显示处理后的图片
cv2.imshow('Coloured Image', color_image)
cv2.waitKey(0) # 等待任意按键
cv2.destroyAllWindows() # 关闭所有 windows 窗口

输出

原始图片 −

使用Python和OpenCV在图像中识别颜色

Colored Image −

使用Python和OpenCV在图像中识别颜色

Detecting Different Colors

在上述示例代码中,我们已经识别出红色范围内的像素点。我们可以修改下限和上限来识别不同的颜色。例如,如果您需要检测绿色,可以将下限和上限设置如下 −

import cv2
import numpy as np
img = cv2.imread('image1.jpg')
cv2.imshow('Original Image', img)
cv2.waitKey(0)
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_range = (12, 25, 25) # 绿色在HSV格式中的下限
upper_range = (86, 255, 255) # 绿色在HSV格式中的上限
mask = cv2.inRange(hsv_img, lower_range, upper_range)
color_image = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('Coloured Image', color_image) # 显示处理后的图片
cv2.waitKey(0) # 等待任意按键
cv2.destroyAllWindows() # 关闭所有 windows 窗口

输出

Original Image −

使用Python和OpenCV在图像中识别颜色

Colored Image −

使用Python和OpenCV在图像中识别颜色

总结

本文讨论了颜色识别技术。颜色识别技术广泛应用于计算机视觉和图像处理领域。我们讨论了如何使用 Python 语言和 OpenCV 库来识别图像中的颜色。我们学习了不同类型的颜色模型,如 RGB 和 HSV。我们还看到了如何创建一个颜色直方图并使用它来识别图像中的主色调,以及如何显示这些主要颜色。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程