创客出手

目录

OpenCV Python 色彩空间变换

本示例使用的OpenCV版本是:4.1.1
运行Python的编辑器:Jupyter notebook

示例目的

这里会介绍有关色彩空间的信息,色彩空间的变换,例如比较常用的BGR转换成RGB,RGB转换成GRAY。


实现代码

1,加载图片

从文件中加载图像

import cv2    # 加载OpenCV
import matplotlib.pyplot as plt   # 加载Matplotlib.pyplot存进plt

img = cv2.imread("cook.jpeg")    # 读取/加载 图片

file

2,把图像从BGR转换成RGB

我们将会使用cv.cvtColot()方法实现色彩空间的转换,使用cv2.COLOR_BGR2RGB指定从什么色彩转换成什么色彩空间。

# 色彩空间转换,把转换后的图像存储在img_bgr2rgb
img_bgr2rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 在Jupyter notebook显示img_bgr2rgb的图像
plt.imshow(img_bgr2rgb)

可以看出,现在Jupyter notebook上显示的图片颜色就正常了。

file

3,把图像从BGR转换成HSV

img_bgr2hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
plt.imshow(img_bgr2hsv)

file

4,把图像从RGB转换成GRAY

img_rgb2gray = cv2.cvtColor(img_bgr2rgb, cv2.COLOR_RGB2GRAY)
plt.imshow(img_rgb2gray)

可以看到,问题又来了,我们需要看到的是一张灰度图。但显示的却是黄绿黄绿的图片。这估计和Matplotlib的cmap默认值有关。

file

我们修改plt.imshow()函数的参数,增加cmap="gray",使其颜色显示为灰度。

有关cmap的详细可以参考:https://matplotlib.org/examples/color/colormaps_reference.html

plt.imshow(img_rgb2gray, cmap="gray")

好了,一切正常。

file


程序说明

本示例主要使用了cv.cvtColor()函数进行色彩空间的转换,该函数有两个参数,两个可选参数。而在显示图片方面如果使用cv.imshow()窗口显示的方式,图片的颜色会正常些,使用plt.imshow()在Jupyter notebook显示的颜色则可能需要一些转换或设置才能达到想要的颜色。

cv.cvtColor()语法

dst = cv.cvtColor( src, code[, dst[, dstCn]] )

第一个参数 src,需要转换色彩空间的图像矩阵数据,也就是通过cv.imread()
第二个参数 code,需要指定从什么色彩空间转换成什么色彩空间。
(可选)第三个参数 dst,输出与src相同宽度和高度的图像。
(可选)第四个参数 dstCn,可以指定色彩通道数,如果为0则输出与src相同色彩通道数。

cv.cvtColor()详细用法请参考:https://docs.opencv.org/4.1.1/d8/d01/group__imgproc__color__conversions.html#ga397ae87e1288a81d2363b61574eb8cab

更多关于 的文章
关注创客出手公众号

关注创客出手