物体跟踪

转换颜色空间

# -*- coding: utf-8 -*-

import cv2

img = cv2.imread('test.jpg')

gray =  cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  #RGB转换为GRAY

#这里的生成的gray图是单通道的

cv2.imshow("gray", gray)

hsv = cv2.cvtColor(img, cv.COLOR_BGR2HSV) #RGB转换为HSV 

cv2.imshow("hsv", hsv)

cv2.namedWindow('first_image', cv.WINDOW_AUTOSIZE)

cv.imshow('first_image', src) 

cv2.waitKey(10000) 

cv2.destroyAllWindows()

1.RGB就是指Red,Green和Blue,一副图像由这三个channel(通道)构成

2.Gray就是只有灰度值一个channel。 

3.HSV即Hue(色调),Saturation(饱和度)和Value(亮度)三个channel

什么是HSV色彩空间

在OpenCV的HSV格式中,H(色彩/色度)的取值范围是 [0, 179],S(饱和度)的取值范围 [0, 255], V(亮度)的取值范围 [0, 255]。但是不同的软件使用的值可能不同。所以当你需要拿OpenCV 的 HSV 值与其他软件的HSV 值进行对比时,一定要记得归一化。


物体跟踪_第1张图片
HSV颜色空间模型

现在我们知道怎样将一幅图像从 BGR 转换到 HSV 了,我们可以利用这一点来提取带有某个特定颜色的物体。在HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。在我们的程序中,我们要提取的是一个蓝色的物体。

代码如下:

# -*- coding: utf-8 -*-

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)

        # 显示图像

        cv2.imshow('frame',frame)

        cv2.imshow('mask',mask)

        k=cv2.waitKey(5)&0xFF

        if k==27:

                   break

# 关闭窗口

cv2.destroyAllWindows()

运行结果:


物体跟踪_第2张图片

注意:

(1)cv2.inRange函数参数有三个

            第一个参数:hsv指的是原图

            第二个参数:lower_blue指的是图像中低于这个lower_blue的值,图像值变为0

            第三个参数:upper_blue指的是图像中高于这个upper_blue的值,图像值变为0

(2)hsv基本颜色分量表


物体跟踪_第3张图片

你可能感兴趣的:(物体跟踪)