python+opencv颜色空间的转换命令与图像的按位与操作

# usr/bin/env python
# coding: utf-8

# 2018年6月15日07:41:23
# 2018年6月15日23:16:01
# python_4

# 目标:
# 1、学会进行颜色空间的转换,特别是两类重要的颜色空间转换,BGR到gray,BGR到Hsv
# 这个目标可以利用一行代码解决
# 颜色空间部分以后会讲到。
# 2、在视频中追踪一个颜色的物体。步骤:
# 得到视频的每一帧
# 转换BGR到Hsv
# 在Hsv颜色空间中设定一个颜色区域的阈值
# 单独的提取这个颜色区域



# 对于颜色空间转换主要命令是:
# cv2.cvtColor(input_image, flag)
# 其中,input_image是用于进行颜色空间变换的图像
# flag则是进行颜色转换的方式
# BGR到gray,flag则是:cv2.COLOR_BGR2GRAY
# BGR到Hsv,flag则是: cv2.COLOR_BGR2HSV


import cv2
import numpy as np

cap = cv2.VideoCapture(0)
# 打开笔记本的摄像头或者台式机的配置的摄像头
# 0表示摄像头的标号,如果没有摄像头或者指定为非0摄像头标号,可能会出错
while cap:
    flag, frame = cap.read()
    # 利用视频帧的cap函数读取一帧的数据
    # 其中frame是每一帧的数据
    # flag表示是否读到了视频数据
    if flag==1:
        # 最好有判断是否成功读取,否则如果没成功读取则会产生一些想不到的错误,而且很难定位错误源头。
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        # 将读到的视频帧的图像从BGR转换到HSV的颜色空间

        lower_blue = np.array([110,50,50])
        upper_blue = np.array([130,255,255])
        # 以上两行是定义BGR的颜色空间中的颜色范围。

        mask = cv2.inRange(hsv, lower_blue, upper_blue)
        # 通过inRange函数将hsv图像限制在lower_blue和upper_blue之间

        result = cv2.bitwise_and(frame, frame, mask=mask)
        # 利用当前帧frame与其自己进行按位与运算,在mask指定区域进行操作。

        cv2.imshow('frame', frame)
        cv2.imshow('mask', mask)
        cv2.imshow('result', result)
        # 展现三个窗口

        k = cv2.waitKey(5)
        if k==27:
            # ESC键在ASCII值就是27。程序中按下ESC,就可以退出界面。
            break
    else:
        print('没有视频数据,可能是摄像头标号有误')
cv2.destroyAllWindows()
# 再次提醒,为了让程序更加健壮,我们需要这个命令来释放窗口


# 整个算法,当摄像头运行成功后,如果出现蓝色的物体,就会截取出来

猜你喜欢

转载自blog.csdn.net/qq_27261889/article/details/80710597