OpenCV 和 Python 中的颜色空间
颜色空间是指不同类型的颜色模式,用于图像处理和信号与系统等各种目的。
Open CV 是一个流行的计算机视觉库,用 C/C++ 编写,并提供 Python 的绑定。OpenCV 提供了操作颜色空间的简便方法。OpenCV 是开源的,并提供了图像处理中各种有用的算法。
在计算机视觉中,颜色使用颜色空间来表示。目前,计算机视觉和图像处理中使用了许多颜色空间,每个颜色空间都有其独特的特征和优势。下面描述了一些图像处理中非常常见的颜色空间:
RGB 颜色空间
让我们看看 RGB 颜色空间。它是图像处理中最常用和最流行的颜色空间之一。在此颜色空间中,图像表示为三种颜色(红色、绿色和蓝色)的组合,每种颜色都分配有某个值,该值范围从 0 到 255。值越大,该颜色的存在感越强。通过这三种颜色的组合,我们可以产生可见光谱中所有可能的颜色。
OpenCV 的 cv2.imread() 函数可用于读取图像文件并返回一个 NumPy 数组,该数组表示图像的像素值。像素值表示为集合 (B, G, R),其中 B、G 和 R 分别表示蓝色、绿色和红色通道的强度值。
示例
在下面的示例中,我们读取图像并使用 cv2.imshow() 函数分离特定图像的不同颜色通道。
这将返回三个单独的数组,分别对应于三种颜色(红色、绿色和蓝色),并在两个图像之间等待按键。
然后它显示这些具有对应颜色的图像。最后,通过 destroyAllWindows() 函数关闭所有图像。
import cv2 image = cv2.imread(image.jpg) B, G, R = cv2.split(image) # Corresponding channels are separated cv2.imshow("original", image) cv2.waitKey(0) cv2.imshow("blue", B) cv2.waitKey(0) cv2.imshow("Green", G) cv2.waitKey(0) cv2.imshow("red", R) cv2.waitKey(0) cv2.destroyAllWindows()
输出
原始图像
蓝色图像
绿色图像
红色图像
HSV 颜色空间
HSV 代表色相、饱和度和值。色相通道表示颜色的色调,饱和度通道表示颜色的强度或纯度。值通道表示颜色的亮度。
它在基于颜色的图像分割任务中特别有用,在这些任务中,我们需要隔离图像中的特定颜色。在 OpenCV 中,我们可以使用 cv2.cvtColor() 函数将 RGB 图像转换为 HSV 颜色空间。
import cv2 import numpy as np # Read an image in RGB color space image = cv2.imread('image.jpg') # show original image cv2.imshow("original image",image) cv2.waitKey(0) # Convert the image to HSV color space hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # show hsv image cv2.imshow("hsv image",hsv_image) cv2.waitKey(0)
输出
原始图像 -
HSV 图像 -
YCbCr 颜色空间
YCbCr 颜色空间将图像的亮度 (Y) 和色度 (CbCr) 分量分开。Y 通道表示颜色的亮度,而 Cb 和 Cr 通道分别表示蓝色和红色的颜色差。
它在视频压缩和传输中特别有用,因为它可以用来减少表示图像或视频流所需的数据量。
在 OpenCV 中,我们可以通过将 cv2.COLOR_BGR2YCrCb 和输入图像作为参数传递给 cv2.cvtColor() 函数,将 RGB 图像转换为 YCbCr 颜色空间。
import cv2 import numpy as np # Read an image in RGB color space image = cv2.imread('image5.jpg') # show original image cv2.imshow("original image",image) cv2.waitKey(0) # Convert the image to YCbCr color space ycbcr_image = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb) # show ycbcr image cv2.imshow("ycbcr image", ycbcr_image) cv2.waitKey(0)
输出
原始图像 -
YCbCr 图像 -
其他一些颜色空间包括:
LAB 颜色空间
LUV 颜色空间
XYZ 颜色空间
CMYK 颜色空间
结论
在本文中,我们讨论了 OpenCV 和 Python 中一些最常用的颜色空间。我们讨论了 RGB、HSV 和 YCbCr 颜色空间。我们还学习了如何使用 OpenCV 库中的 cv2.cvtColor() 函数将图像从一个颜色空间转换为另一个颜色空间。我们了解了不同的颜色空间以及它们在 OpenCV 中的工作原理。我们可以使用它来相应地处理和分析不同的图像,并从中提取所需的信息。我们学习了不同颜色空间的优缺点,以及针对特定任务选择哪种颜色空间。