opencv-python(7):颜色空间转换

来源:互联网 发布:centos apt 编辑:程序博客网 时间:2024/06/03 04:09

在opencv中有超过150种进行颜色转换的方法,但我们经常用到的只是两种:BGR-灰度图,跟BGR-HSV。

我们用到的函数是:cv2.cetColor(input_image,flag),flag就是我们要转换的类型。

对于灰度图转换,flag就是cv2.COLOR_BGR2GRAY,对于HSV转换,用到的flag是cv2.COLOR_BGR2HSV。

详细可看  点击打开链接

在opencv的HSV格式中,H(hue:色彩/亮度)的取值范围是[0,179],S(saturation:饱和度)取值范围是[0,255],V(value:亮度)的取值范围是[0,255]。

1、提取图像中的蓝色部分

代码:

import cv2import numpy as npimg=cv2.imread('C:\\Users\\WLX\\Desktop\\10.jpg',cv2.IMREAD_COLOR)hsv=cv2.cvtColor(img,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)res=cv2.bitwise_and(img,img,mask=mask)cv2.imshow('hsv',hsv)cv2.imshow('mask',mask)cv2.imshow('res',res)cv2.imshow('img',img)k=res=cv2.waitKey(5)&0xFFwhile k==27:    breakcv2.waitKey(0)
cv2.inRange()函数
inRange(src,lowerb, upperb[, dst]) -> dst

第一个参数是原数组,可以是单通道也可以是多通道,lower:下界  upper上界

在python中,假设是单通道,如果lower=[0],upper=[128],对每个数在0-128之间取255,其余的取0

如果在多通道,假设lower=[0,0,0],upper=[128,128,128],对于每个数都在0-128之间取255,其余的取0,最后几个数相与,都是255取255,否则取0

结果:

mask:


res:


2、如何寻找对象的HSV值

上面我们提取蓝色,但我们首先应该知道蓝色的HSV值,我们用一下函数取找出

函数:

import numpy as npimport cv2green=np.uint8([[[0,255,0]]])hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)print(hsv_green)
结果是:[[[60 255 255]]]

那我们可以使用[H-10,100,100]作为下限,[H+10,255,255]作为上限。
3、练习

同时提取三个不同颜色的物体

原图:


代码:

import numpy as npimport cv2img=cv2.imread('C:\\Users\\WLX\\Desktop\\12.png',cv2.IMREAD_COLOR)hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)lower_blue=np.array([110,100,100])#blueupper_blue=np.array([130,255,255])lower_green=np.array([50,100,100])#greenupper_green=np.array([70,255,255])lower_red=np.array([0,100,100])#redupper_red=np.array([10,255,255])blue_mask=cv2.inRange(hsv,lower_blue,upper_blue)green_mask=cv2.inRange(hsv,lower_green,upper_green)red_mask=cv2.inRange(hsv,lower_red,upper_red)blue=cv2.bitwise_and(img,img,mask=blue_mask)green=cv2.bitwise_and(img,img,mask=green_mask)red=cv2.bitwise_and(img,img,mask=red_mask)res=red+blue+greencv2.imshow('res',res)cv2.imwrite('C:\\Users\\WLX\\Desktop\\444.jpg',res)cv2.waitKey(0)cv2.destroyAllWindows()
结果: