openCV学习笔记6—颜色转换,物体跟踪,获取阈值

openCV中的颜色转换有100多种,但我们经常用到的只有两种。BGR↔Gray 和 BGR↔HSV。
用到的函数cv2.cvtColor(input_image,flag)。flag就是要转化的类型。

接下来重点介绍物体的跟踪。在此之前需要知道几点。

掩膜
含义:掩模是由0和1组成的一个二进制图像。当在某一功能中应用掩模时,1值区域被处理,被屏蔽的0值区域不被包括在计算中。通过指定的数据值、数据范围、有限或无限值、感兴趣区和注释文件来定义图像掩模,也可以应用上述选项的任意组合作为输入来建立掩模。
示例:下图中的mask就是掩膜。
openCV学习笔记6—颜色转换,物体跟踪,获取阈值_第1张图片

HSV
H(Hue):色调,取值范围是 [0,179] ,它用来限制某一个颜色的彩色光谱范围;

S(Saturation):饱和度,取值范围是 [0,255] ,它用来限制颜色的深度,值越大颜色越深;

V(Value):色值,取值范围是 [0,255] ,它用来限制像素的亮度,值越大像素越亮。

cv2.bitwise_and()
对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0。示例参照上图。

uint8
uint8是专门用于存储各种图像的(包括RGB,灰度图像等),范围是从0–255.
想转化为uint8类型的,可以点下边的网址:https://blog.csdn.net/qq_39751320/article/details/104849194

追踪蓝色物体源码

import cv2
import numpy as np

cap=cv2.VideoCapture(0)

while (1):
    #获取每一帧的图片
    ret,frame=cap.read()
    #转化为HSV
    hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)

    #设定蓝色的阈值
    lower_blue=np.array([110,50,50])
    upper_blue=np.array([130,255,255])

    #根据阈值构建掩膜
    mask=cv2.inRange(hsv,lower_blue,upper_blue)

    #对原图像和掩膜进行位运算
    #src1:第一个图像(合并的第一个对象)src2:第二个图像(合并的第二个对象)mask:理解为要合并的规则。
    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
    #按esc键退出
    if k==27:
        break

cv2.destroyAllWindows()

获取阈值
追踪物体的关键就是获取相关的阈值。接下来给出将RGB转化为HSV的方法。

import cv2
import numpy as np
# 这里的三层括号应该分别对应于 cvArray,cvMat,IplImage
white=np.uint8([[[255,255,255]]])
white_hsv=cv2.cvtColor(white,cv2.COLOR_BGR2HSV)
print(white_hsv)

可以分别用 [H-100,100,100] 和 [H+100,255,255] 做上下阈值。

下边是一些常见颜色的H值范围。

-30<=h<30, 红色

30<=h<90, 黄色

90<=h<150,绿色

150<=h<210,青色

210<=h<270,蓝色

270<=h<330,品红色

你可能感兴趣的:(OpenCV学习笔记,opencv,python,计算机视觉)