OpenCV cvtColor()函数的用法(附带实例)
生活中看到的大多数彩色图片都是 RGB 类型的,但是在进行图像处理时需要用到灰度图、二值图、HSV(六角锥体模型,这个模型中颜色的参数分别是色调 H、饱和度 S、明度 V)、HSI 等颜色制式,对此 OpenCV 提供了 cvtColor() 函数来实现这些功能。
cvtColor() 函数用来进行颜色空间的转换。随着 OpenCV 版本的升级,对于颜色空间种类的支持也越来越多,涉及不同颜色空间之间的转换,比如 RGB 和灰度的互转、RGB 和 HSV 的互转等。
cvtColor() 函数声明如下:
函数 cvtColor() 的作用是将一个图像从一个颜色空间转换到另一个颜色空间,但是当从 RGB 向其他类型转换时,必须明确指出图像的颜色通道。在 OpenCV 中,默认的颜色制式排列是 BGR 而非 RGB。因此,对于 24 位颜色图像来说,前 8 位是蓝色,中间 8 位是绿色,最后 8 位是红色。
需要注意的是,cvtColor() 函数不能直接将 RGB 图像转换为二值图像,需要借助 threshold() 函数。另外,如果对 8 位图像使用 cvtColor() 函数进行转换,将会丢失一些信息。
我们常用的颜色空间转换有两种:BGR 转为灰度图和 BGR 转为 HSV。下面来看一个例子,将图像转换为灰度图和 HSV。
【实例】将图片转换为灰度图和 HSV。
运行工程,结果如下图所示:
cvtColor() 函数用来进行颜色空间的转换。随着 OpenCV 版本的升级,对于颜色空间种类的支持也越来越多,涉及不同颜色空间之间的转换,比如 RGB 和灰度的互转、RGB 和 HSV 的互转等。
cvtColor() 函数声明如下:
cvtColor(src, code[, dst[, dstCn]]) -> dst
- src 表示输入图像,即要进行颜色空间变换的原图像,可以是数组;
- code 表示颜色空间转换代码,即在此确定将什么制式的图片转换成什么制式的图片;
- dst 表示输出与 src 相同大小和深度的图像,即进行颜色空间变换后存储图像;
- dstCn 表示目标图像通道数,默认取值为 0,表示从 src 和代码自动获得通道的数量。
函数 cvtColor() 的作用是将一个图像从一个颜色空间转换到另一个颜色空间,但是当从 RGB 向其他类型转换时,必须明确指出图像的颜色通道。在 OpenCV 中,默认的颜色制式排列是 BGR 而非 RGB。因此,对于 24 位颜色图像来说,前 8 位是蓝色,中间 8 位是绿色,最后 8 位是红色。
需要注意的是,cvtColor() 函数不能直接将 RGB 图像转换为二值图像,需要借助 threshold() 函数。另外,如果对 8 位图像使用 cvtColor() 函数进行转换,将会丢失一些信息。
我们常用的颜色空间转换有两种:BGR 转为灰度图和 BGR 转为 HSV。下面来看一个例子,将图像转换为灰度图和 HSV。
【实例】将图片转换为灰度图和 HSV。
import cv2 #将图片转换为灰度图 src_image = cv2.imread("test.jpg") gray_image = cv2.cvtColor(src_image, cv2.COLOR_BGR2GRAY) #将图片转换为HSV hsv_image = cv2.cvtColor(src_image, cv2.COLOR_BGR2HSV) cv2.imshow("src_image", src_image) cv2.imshow("gray_image", gray_image) cv2.imshow("hsv_image", hsv_image) cv2.waitKey(0)首先读取工程目录下的图片 test.jpg,然后调用 cvtColor() 函数将原图转为灰度图,再调用 cvtColor() 函数将原图转为 HSV 图,最后将 3 幅图片显示出来。
运行工程,结果如下图所示:
