本示例使用的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") # 读取/加载 图片
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上显示的图片颜色就正常了。
3,把图像从BGR转换成HSV
img_bgr2hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
plt.imshow(img_bgr2hsv)
4,把图像从RGB转换成GRAY
img_rgb2gray = cv2.cvtColor(img_bgr2rgb, cv2.COLOR_RGB2GRAY)
plt.imshow(img_rgb2gray)
可以看到,问题又来了,我们需要看到的是一张灰度图。但显示的却是黄绿黄绿的图片。这估计和Matplotlib的cmap默认值有关。
我们修改plt.imshow()
函数的参数,增加cmap="gray"
,使其颜色显示为灰度。
有关cmap的详细可以参考:https://matplotlib.org/examples/color/colormaps_reference.html
plt.imshow(img_rgb2gray, cmap="gray")
好了,一切正常。
程序说明
本示例主要使用了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