1, 颜色空间转换
cv中的颜色空间转换非常多, 但是一般常用的就是 BGR <-> GRAY, BGR <-> HSV BGR <-> GRAY的flag为: cv2.COLOR_BGR2GRAY, BGR <-> HSV的flag为: cv2.COLOR_BGR2HSV
1.1 cv2.inRange(src, lowerb, upperb, dst=None)
检查图片像素数组元素是否在另外两个数组元素值之间, 输出一个二值化的结果,像素点在阀值间则为255, 否者为0 (可以是单通道, 多通道)
参数 | 含义 |
---|---|
src | 图片 |
lowerb | 低阀值 |
upperb | 高阀值 |
dst |
# coding:utf-8
import cv2
import numpy as np
if __name__ == '__main__':
video = cv2.VideoCapture('../happybirthday/happybirthdaydemo.mp4')
ret = True
while ret:
# 获取每一帧
ret, frame = video.read()
if ret:
print(ret)
# 转为hsv
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 设定颜色阀值
upper = np.array([170,255,255], np.uint8)
lower = np.array([165, 100, 100], np.uint8)
# 根据阀值构建mask
mask = cv2.inRange(hsv, lower, upper)
# 对原图和mask进行位运算
res = cv2.bitwise_and(frame,frame,mask=mask)
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
k = cv2.waitKey(10) & 0xFF
if k == 27:
break
# 关闭窗口
cv2.destroyAllWindows()
1.2 怎么获取一个颜色的HSV
# coding:utf-8
import cv2
import numpy as np
if __name__ == '__main__':
src = np.zeros((1,1,3),np.uint8)
# src = [[[0,255,0]]]
src[0,0] = [0, 255, 0]
res = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
print(res)