【opencv3 学习记录】第八章 颜色空间转换

一:转换颜色空间

常用的两种颜色转换形式:BGR\leftrightarrowGray 与BGR\leftrightarrowHSV

1.函数:cv2.cvtColor(input_image,flag)

其中flag就是转换类型

(1)BGR\leftrightarrowGray     flag为cv2.COLOR_BGR2GRAY

(2)BGR\leftrightarrowHSV      flag为cv2.COLOR_BGR2HSV

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

二:特定颜色的物体跟踪

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

下面就是就是我们要做的几步:

• 从视频中获取每一帧图像

• 将图像转换到 HSV 空间

• 设置 HSV 阈值到蓝色范围。

• 获取蓝色物体,当然我们还可以做其他任何我们想做的事,比如:在蓝色 物体周围画一个圈。

inRange()函数:可实现二值化功能(这点类似threshold()函数),更关键的是可以同时针对多通道进行操作,使用起来非常方便!主要是将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0),该功能类似于之间所讲的双阈值化操作。

import cv2
import numpy as np
cap=cv2.VideoCapture(r'F:\video\demo\blue.mp4')
while(1):
    ret,frame=cap.read()
    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)
    # inRange()函数主要是将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0)
    res=cv2.bitwise_and(frame,frame,mask=mask)

    cv2.imshow('frame',frame)
    cv2.imshow('hsv', hsv)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    k=cv2.waitKey(0)
    if k==27:
          break
cv2.destroyAllWindows()

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值