4 图像基础:像素、颜色空间转换
导言
在进入计算机视觉领域的大门之前,掌握图像的基础知识是至关重要的。这一节将从像素深入讲解,引导大家涉足图像处理的世界,并使我们了解和使用颜色空间转换这一关键技术。
4.1 像素:图像的基石
像素,通常被视为图像的基本单位,是构成数字图像的最小元素。在一个二维图像中,像素被排列成行和列,形成了一个矩阵。
例题1:寻找特定像素值假设你有一张灰度图像(只有一个颜色通道),请编写一个Python脚本使用OpenCV来找到图像正中心像素的灰度值。
import cv2
# 读取图像
image = cv2.imread('path_to_image', cv2.IMREAD_GRAYSCALE)
# 获取图像中心像素坐标
height, width = image.shape
center_pixel_value = image[height // 2, width // 2]
print("中心像素的灰度值是:", center_pixel_value)
4.2 颜色空间:通往真实视觉的桥梁
在计算机视觉中,我们经常需要转换图像的颜色空间。颜色空间是描述颜色的方法,最常见的颜色空间包括RGB(红、绿、蓝)和HSV(色调、饱和度、亮度)。
RGB颜色空间:在这个模型中,任何颜色都可以通过三种颜色光量的组合来创建,即红、绿、蓝。 HSV颜色空间:相对于RGB颜色模型以人的视觉感知为基础,HSV模型描述了颜色的感知特性,包括色相、饱和度和明度。 例题2:颜色空间转换构建一个Python脚本以使用OpenCV将图像从RGB颜色空间转换到HSV颜色空间。
import cv2
# 读取彩色图像
image = cv2.imread('path_to_image')
# 将颜色空间从BGR(默认为OpenCV颜色空间)转换为HSV
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
CGColorspace放大镜
4.3 颜色空间的实际应用
颜色空间转换在图像处理中扮演着重要的角色。下面列举一些实际场景中的应用:
例题3:简单的颜色分割使用HSV颜色空间进行颜色分割时,我们可以轻松地分离出图像中颜色相近的区域。
import cv2
import numpy as np
# 载入图像
image = cv2.imread('path_to_image')
# 转换到HSV颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 定义HSV中蓝色的范围
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# 阈值化以获取只有蓝色的部分
mask = cv2.inRange(hsv_image, lower_blue, upper_blue)
# 将掩码与原图像进行位运算,获得蓝色区域
blue_object = cv2.bitwise_and(image, image, mask=mask)
# 显示图像
cv2.imshow('Original image', image)
cv2.imshow('Blue object', blue_object)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.4 深入理解和实践
了解了像素和颜色空间的基本概念之后,你可以通过实际案例来加深这些知识。你可以尝试将像素级操作应用于图像处理任务,或通过颜色空间转换改善图像分析的效果。
例题4:图像二值化在某些情况下,你可能需要将图像转换为黑白两种颜色,这称为二值化。在HSV空间中实现这一点可以帮助提取特定颜色的特征。
import cv2
import numpy as np
# 载入图像
image = cv2.imread('path_to_image')
# 转换到HSV颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 定义HSV中要提取的颜色范围
lower_val = np.array([hsv_low_h, hsv_low_s, hsv_low_v])
upper_val = np.array([hsv_high_h, hsv_high_s, hsv_high_v])
# 阈值化操作
mask = cv2.inRange(hsv_image, lower_val, upper_val)
binary_image = cv2.bitwise_and(image, image, mask=mask)
# 显示结果
cv2.imshow('Binary image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
通过这四个例题,我们已经介绍了像素和颜色空间的基本概念以及其在计算机视觉中的应用。进一步的研究和实践将帮助你更好地理解和加深这些概念,并在更高级的图像分析任务中应用它们。在下一节,我们将探讨图像的绘制功能和基本操作,敬请期待。
这里简单介绍了一些基本知识点,更细致的内容请参考:
李立宗,OpenCV轻松入门(第2版),电子工业出版社,2023 李立宗,计算机视觉40例(从入门到深度学习:OpenCV-Python),电子工业出版社,2022
单击【阅读原文】参加OpenCV-Python课程学习。
单击【阅读原文】参加OpenCV-Python课程学习。
在本公众号【计算机视觉之光】回复关键字“叮叮当当”获取更多的Python学习资料。