这是我参与更文挑战的第10天,活动详情查看: 更文挑战
OpenCV
是一个C++
库,目前流行的计算机视觉编程库,用于实时处理计算机视觉方面的问题,它涵盖了很多计算机视觉领域的模块。在Python
中常使用OpenCV
库实现图像处理。
本文将介绍如何在Python3
中使用OpenCV
实现色彩转换:
前文
Opencv
中有数百种关于在不同色彩空间之间转换的方法。
当前计算机视觉中有三种常用的色彩空间:灰度
、BGR
、以及HSV
但是,经常用的也就两种,即BGR<–>Gray
和BGR <–>HSV
。
灰度、BGR、HSV
灰度色彩空间
是通过去除彩色信息来将其转换为灰阶,灰度色彩空间对中间处理特别有效,比如:人脸检测
BGR
,即蓝绿红色彩空间,每一个像素点都由一个三元数组来表示,分别代表蓝绿红三种颜色。与之相似的颜色空间BGR
,它们只是再颜色的顺序上有所不同
HSV:H(Hue)
是色调,范围为[0,179]
,S(Saturation)
是饱和度,[0,255]
,V(Value)
表示黑暗的程度,范围为[0,255]
。
色彩转换
对于色彩转换,我们使用函数cv2.cvtColor(input_image, flag)
实现,flag
就是转换类型。
下面用代码实现色彩空间的转换。
import cv2
import numpy as np
# 颜色空间转换,从bgr到gray,hsv,yuv,ycrcb
def color_space_demo(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("gray", gray)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cv2.imshow("hsv", hsv)
yuv = cv2.cvtColor(image, cv2.COLOR_BGR2YUV)
cv2.imshow("yuv", yuv)
ycrcb = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)
cv2.imshow("ycrcb", ycrcb)
if __name__ == '__main__':
src = cv2.imread("E:\\demo\\lena.jpg") # 读入图片放进src中
cv2.namedWindow("lena", cv2.WINDOW_AUTOSIZE) # 创建窗口, 窗口尺寸自动调整
cv2.imshow("lena", src) # 将src图片放入该创建的窗口中
color_space_demo(src)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出为:
原图
gray图
hsv图
ycrcb图
yuv图
本月将陆续推出相关系列文章,
篇篇精彩,尽请关注。