HSV
在HSV颜色空间中要比在BGR空间中更容易表示一个特定颜色 H:色彩/色度。[0,179] S:饱和度,[0,255] V:亮度,[0,255] hsv = cv2.cvtColor(input_image,flag) BGR <--> HSV : flag=cv2.COLOR_BGR2HSV BGR <--> Gray : flag=cv2.COLOR_BGR2HSV mask = cv2.inRange(hsv, lower_red, upper_red) 设阈值,去除背景部分 第一个参数:hsv指的是原图 第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0 第三个参数:upper_red指的是图像中高于这个upper_red的值,图像值变为0 而在lower_red~upper_red之间的值变成255物体跟踪
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([105,43,46]) upper_blue=np.array([110,255,255]) #根据阈值构建掩模,蓝色变白,背景变黑 mask=cv2.inRange(hsv,lower_blue,upper_blue) #对原图像和掩模进行位运算,只显示蓝色物体 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 if k==27: break #关闭窗口 cv2.destroyAllWindows()找到颜色对应的HSV值
import cv2 import numpy as np red=np.uint8([[[0,0,255]]]) hsv_red=cv2.cvtColor(red,cv2.COLOR_BGR2HSV) print (hsv_red) #[[[ 0 255 255]]] 现在你可以分别用 [H-100,100,100] 和 [H+100,255,255] 做上、下阈值。mask 掩模 效果图如下 res 对原图像和掩模进行位运算 效果图如下