使用 Python 和 OpenCV 识别图像中的颜色
pythonopencvserver side programmingprogramming更新于 2024/3/6 4:15:00
识别图像中的颜色是计算机视觉和图像处理中常见的任务。它具有广泛的应用,例如对象检测、图像分割和图像检索。在本文中,我们将了解如何使用 Python 和 OpenCV 确定图像中的颜色。
Open CV 是一个流行的计算机视觉库,用 C/C++ 编写,与 Python 绑定,OpenCV 提供了操作颜色空间的简便方法。Open CV 是开源的,提供了各种可用于图像处理的算法。
在识别图像中的颜色之前,让我们先了解一些常见的图像表示方法。在数字图像中,颜色通常使用 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:将蒙版应用于图像
我们可以将上一步中获得的蒙版应用于原始图像,以便 hsv_img 仅提取颜色范围内的像素。
color_image = cv2.bitwise_and(image, image, mask=mask)
步骤 5:显示彩色图像
最后,我们可以显示仅包含我们指定的颜色范围内的像素的彩色图像。
# 显示彩色图像
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)
# 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()
输出
原始图像−
彩色图像 −
检测不同颜色
在上面的代码中,我们已经识别了红色范围内的像素。我们可以修改下限和上限范围来检测不同的颜色。例如,如果您需要检测绿色,我们可以按如下方式设置下限和上限 -
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()
输出
原始图像 −
彩色图像 −
结论
在本文中,我们讨论了颜色识别。颜色识别通常用于计算机视觉和图像处理。我们讨论了如何使用 Python 语言和 Python 的 OpenCV 库识别图像中的颜色。我们了解了不同类型的颜色模型,如 RGB 和 HSV。我们了解了如何创建颜色直方图并使用它来识别图像中的主色。我们还了解了如何显示这些主色。
相关文章
使用 Python 中的 OpenCV 制作动画图像
使用 Python 和 OpenCV 识别图像中的颜色
在 OpenCV-Python 中用直线将图像上的新点连接到前一个点
使用 Python 和 OpenCV 转换 BGR 和 RGB
打印
下一节 ❯❮ 上一节