8, opencv核心操作学习- 颜色空间转换

488 阅读1分钟

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)