实验:色彩空间操作

OpenCVBeginner
立即练习

介绍

欢迎来到 OpenCV-Python 色彩空间教程!

色彩空间是一种表示图像中颜色通道的方式。有几种不同的色彩空间,但最常见的三种是:

  • BGR(Blue, Green, Red):OpenCV 默认使用的色彩空间。
  • Gray:图像的灰度表示。
  • HSV(Hue, Saturation, Value):颜色的圆柱坐标表示。

在本教程中,我们将重点介绍如何在 BGR、Gray 和 HSV 色彩空间之间转换图像。

使用 cv.cvtColor() 函数在色彩空间之间转换并显示图像

要在色彩空间之间转换图像,我们使用 cv.cvtColor() 函数。首先,导入必要的库并读取一张图像:

打开 Python Shell

在终端中输入以下命令以打开 Python shell:

python3

使用 cv.imread() 函数读取默认文件夹中准备的图像 image.jpg

import cv2 as cv
import numpy as np

## 读取图像
image = cv.imread('image.jpg')

BGR 转 Gray

要将图像从 BGR 转换为 Gray,使用 cv.COLOR_BGR2GRAY 标志:

## 将图像转换为灰度图
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

BGR 转 HSV

要将图像从 BGR 转换为 HSV,使用 cv.COLOR_BGR2HSV 标志:

## 使用 HSV 色彩空间。HSV 色彩空间主要用于目标跟踪
hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)

显示转换后的图像

要显示原始图像和转换后的图像,使用 cv.imwrite() 函数:

## 将图像保存到指定文件
cv.imwrite('image.jpg', image)
cv.imwrite('gray_image.jpg', gray_image)
cv.imwrite('hsv_image.jpg', hsv_image)

使用 cv.inRange() 函数从图像中提取特定颜色的物体

要从图像中提取特定颜色的物体,可以使用 cv.inRange() 函数。在这个例子中,我们将从图像中提取一个蓝色的物体。

定义颜色范围

首先,在 HSV 色彩空间中定义蓝色的下限和上限:

## 蓝色在 HSV 中大约为 240 度(360 度制)。
## OpenCV-HSV 中的 Hue 范围为 0-180,以便将值存储在 8 位中。
## 因此,蓝色在 OpenCV-HSV 中表示为 H 值约为 240 / 2 = 120。
## 为了正确检测蓝色,可以选择以下值:
blue_lower = np.array([100, 150, 0], np.uint8)
blue_upper = np.array([140, 255, 255], np.uint8)

对图像进行阈值处理

对 HSV 图像进行阈值处理,以仅获取蓝色部分:

## 蓝色掩码
blue_mask = cv.inRange(hsv_image, blue_lower, blue_upper)

应用掩码

将掩码应用到原始图像中以提取蓝色物体:

## 使用掩码提取蓝色物体
blue_object = cv.bitwise_and(image, image, mask=blue_mask)

显示提取的物体

显示原始图像和提取的蓝色物体:

## 将图像保存到指定文件
cv.imwrite('blue_object.jpg', blue_object)

总结

在本教程中,我们介绍了 OpenCV-Python 色彩空间的基础知识。通过掌握这些知识,你现在可以处理不同的色彩空间,并将它们应用于各种图像处理任务中。你还可以尝试 OpenCV 支持的其他色彩空间,例如 LAB 或 YCrCb。