使用 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。我们了解了如何创建颜色直方图并将其用于识别图像中的主导颜色。我们还了解了如何显示这些主导颜色。