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

在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 cv2
import numpy as np
img=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)&0xFF
while k==27:
    break
cv2.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:

opencv-python(7):颜色空间转换_第1张图片

res:

opencv-python(7):颜色空间转换_第2张图片

2、如何寻找对象的HSV值

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

函数:

import numpy as np
import cv2
green=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、练习

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

原图:

opencv-python(7):颜色空间转换_第3张图片

代码:

import numpy as np
import cv2
img=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])#blue
upper_blue=np.array([130,255,255])
lower_green=np.array([50,100,100])#green
upper_green=np.array([70,255,255])
lower_red=np.array([0,100,100])#red
upper_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+green
cv2.imshow('res',res)
cv2.imwrite('C:\\Users\\WLX\\Desktop\\444.jpg',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:

opencv-python(7):颜色空间转换_第4张图片

你可能感兴趣的:(python-opencv)