OpenCV-Python学习之路-5:Changing Colorspaces(颜色空间转换)

文章目录

    • 参考依据
    • 目标
    • 1. 改变颜色空间
    • 2. Object Tracking 物体追踪

参考依据

1.官方文档:
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html#converting-colorspaces
2.RGB、HSV和HSL颜色空间:
https://zhuanlan.zhihu.com/p/67930839

目标

  1. 学习从一个颜色域转换到另一个颜色域,例如 BGR<->GRAY, BGR<->HSV等
  2. 学习到cv2.cvtColor(),cv2.inRange()等

1. 改变颜色空间

opencv提供了超过150中颜色空间转换,这里我们只关注最常见的两种:BGR-Gray 以及 BGR-HSV。颜色空间转换用的函数为:cv2.cvtColor(src, flag)

比如BGR->GRAY,flag即为cv2.COLOR_BGR2GRAY,BGR->HSV,flag即为cv2.COLOR_BGR2HSV。

这里简单地介绍一下RGB和HSV两种颜色空间,为什么有了RGB来表示颜色,还要用HSV呢?简单地说,RGB表示的颜色空间三个分量相关性太高,连续变化颜色时并不直观,如果直接用欧氏距离来表示颜色相关性的话,得到的结果不符合人的视觉效果。 由于RGB表示的颜色空间均匀性较差,所以在图像处理时,通常使用HSV颜色空间,HSV分别代表三个值:

  • Hue(色调、色相)
  • Saturation(饱和度,色彩纯净值)
  • Value(明度)

值得注意的是:在opencv中,Hue的范围为[0, 179],Saturation为[0, 255],Value为[0,255]

如果要将对应的RGB值转换为HSV的话,可以使用如下代码:

# 以绿色为例
green = np.uint8([[[0, 255, 0]]])
hsv = cv2.cvtColor(green, cv2.COLOR_BGR2HSV)
print(hsv)
# [[[ 60 255 255]]]

关于色彩空间的详细说明,可以参照参考依据的第二个链接,这里不做过多介绍。

2. Object Tracking 物体追踪

知道了HSV的一些原理以及它的特点(颜色空间均匀性好),可以利用HSV来简单设计一个程序,追踪有色物体,这里紧贴时事,就以在摄像头中追踪捕捉一下口罩为例吧。

cap = cv2.VideoCapture(0)  # 获取摄像头设备

while True:
    _, frame = cap.read()
    cv2.imshow('1', frame)
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)   # BGR -> HSV
    # 定义阈值范围,保留蓝色的色域,标准的蓝色为120,255,255
    lower_blue = np.array([75, 60, 60])
    upper_blue = np.array([120, 255, 255])
    mask = cv2.inRange(hsv, lower_blue, upper_blue)  # 使用inRange保留蓝色区域
    cv2.imshow('2', mask)
    # 提取蓝色区域
    res = cv2.bitwise_and(frame, frame, mask=mask)
    cv2.imshow('3', res)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

OpenCV-Python学习之路-5:Changing Colorspaces(颜色空间转换)_第1张图片

你可能感兴趣的:(玩玩OpenCV)