使用Python和OpenCV识别图像中的颜色
在计算机视觉和图像处理中,识别图像中的颜色是一项常见任务。它具有广泛的应用,如目标检测、图像分割和图像检索。在本文中,我们将看到如何使用Python和OpenCV确定图像中的颜色。
Open CV is a popular computer vision library written in C/C++ with bindings for Python, OpenCV provides easy ways of manipulating color spaces. Open CV is open source and gives various algorithms useful in image processing.
在识别图像中的颜色之前,让我们了解一些常见的图像表示方法。在数字图像中,颜色通常使用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) # lower range of red color in HSV
upper_range = (10, 255, 255) # upper range of red color in HSV
mask = cv2.inRange(hsv_image, lower_range, upper_range)
第4步: 对图像应用遮罩
我们可以将上一步获得的遮罩应用到原始图像上,以提取仅在颜色范围内的像素。
color_image = cv2.bitwise_and(image, image, mask=mask)
第5步:显示彩色图像
最后,我们可以显示仅包含在我们指定的颜色范围内的像素的彩色图像。
# Display the color image
cv2.imshow('Color Image', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
示例
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)
# lower range of red color in HSV
lower_range = (0, 50, 50)
# upper range of red color in HSV
upper_range = (150, 255, 255)
mask = cv2.inRange(hsv_img, lower_range, upper_range)
color_image = cv2.bitwise_and(img, img, mask=mask)
# Display the color of the image
cv2.imshow('Coloured Image', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
原始图片 −
彩色图片 −
检测不同颜色
在上面的代码中,我们已经识别出了红色范围内的像素。我们可以修改下限和上限来检测不同的颜色。例如,如果您需要检测绿色,我们可以将下限和上限设置如下 −
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) # lower range of green color in HSV
upper_range = (86, 255, 255) # upper range of green color in 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()
输出
原始图像 –
彩色图像 –
结论
本文讨论了颜色识别。颜色识别在计算机视觉和图像处理中经常使用。我们讨论了如何使用Python语言和Python的OpenCV库来识别图像中的颜色。我们学习了不同类型的颜色模型,如RGB和HSV。我们看到了如何创建颜色直方图并使用它来识别图像中的主导颜色。我们还看到了如何显示这些主导颜色。