OpenCV 中的图像处理
1、 颜色空间转换
a) 转换颜色空间
在 OpenCV 中有超过 150 种进行颜色空间转换的方法。但是最常用的也就两种:
BGRGray 和 BRGHSV。用到的函数是 cv2.cvtColor(inpumg,!ag).其中 !ag
就是转换类型。对于 BRGGray 的转换,!ag 为 cv2.COLOR_BGR2GRAY;对于
BGRHSV 的转换,!ag 为 cv2.COLOR_BGR2HSV。
注意:在 OpenCV 的 HSV 格式中,H(色彩/色度)的取值范围是[0,179],S(饱和
度)的取值范围[0,255],V(亮度)的范围是[0,255],但是不同的软件使用的值可
能不同,需要对比归一化。
b) 物体跟踪
将图像转换到 HSV,可以利用这一点来提取带有某个特定颜色的物体。在 HSV 颜
色空间要比在 BGR 空间中更容易表示一个特定的颜色。例如我们要提取一个蓝颜
色的物体,有一下几个步骤:
1.从视频中获取每一帧图像
2.将图像转换到 HSV 空间
3.设置 HSV 阈值到蓝色范围
4.获取蓝色物体,比如在蓝色物体周围画个圈。
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
ret, frame = cap.read()# 获取每一帧
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)# 转换到 HSV
lower_blue = np.array([110,50,50])# 设定蓝色的阈值
upper_blue = np.array([130,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)# 根据阈值构建掩模
res = cv2.bitwise_and(frame, frame, mask=mask)# 对原图像和掩模进行位运算
# 显示图像
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
k = cv2.waitKey(5)&0xFF
if k == 27:
break
cv2.destroyAllWindows()
c) 怎样找到跟踪对象的 HSV 值
可以使用 cv2.cvtColor()函数来确定,这里不输入图像而是输入 BGR 的值,将其转
换成 HSV,然后即可将 HSV 值打印出来,例如:
>>> green = np.uint8([[[0,255,0]]])
>>> hsv1 = cv2.cvtColor(green, cv2.COLOR_BGR2HSV)
>>> print(hsv1)
[[[ 60 255 255]]]