1.彩色转灰度
import cv2
cap = cv2.VideoCapture(0)
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
while cap.isOpened():
ret, frame = cap.read()
if ret:
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('video',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()2.查看所有支持的颜色空间
flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
print(flags)3.颜色转化其实是数学计算
#灰度化最常用的是: gray=R*0.299+G*0.587+B*0.114
4.颜色追踪的原理
HSV 是一个常用于颜色识别的模型,相比 BGR 更易区分颜色,转换模式用`COLOR_BGR2HSV`表示 OpenCV 中色调H范围为[0,179],饱和度S是[0,255],明度V是[0,255]。 虽然H的理论数值是0°-360°,但8位图像像素点的最大值是255,所以OpenCV中除以了 2, 某些软件可能使用不同的尺度表示,所以同其他软件混用时,记得归一化。 #现在,我们实现一个使用 HSV 来只显示视频中蓝色物体的例子,步骤如下: 1. 捕获视频中的一帧 2. 从 BGR 转换到 HSV 3. 提取蓝色范围的物体 4. 只显示蓝色物体
先获取标准蓝色的hsv色值
blue = np.uint8([[[255, 0, 0]]]) hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV) print(hsv_blue) # [[[120 255 255]]]
以下代码实现只取蓝色
import cv2
import numpy as np
#载入图片
img = cv2.imread('d:/www2/333/222.jpg')
#转为hsv
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#蓝色的范围,不同光照条件下不一样,可灵活调整
blue_min = np.array([110,100,100])
blue_max = np.array([130,255,255])
#inRange():介于 lower/upper 之间的为白色,其余黑色
mask = cv2.inRange(img_hsv,blue_min,blue_max)
#只保留原图中的蓝色部分
dst = cv2.bitwise_and(img,img,mask=mask)
cv2.imshow('img',img)
cv2.imshow('img_hsv',img_hsv)
cv2.imshow('mask',mask)
cv2.imshow('dst',dst)
cv2.waitKey(0)5.练习:实现同时获取图片中的红黄蓝
import cv2
import numpy as np
img = cv2.imread('d:/www2/333/222.jpg')
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
blue = np.uint8([[[255,0,0]]])
blue_hsv = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
print(blue_hsv)#[[[120 255 255]]]
red = np.uint8([[[0,0,255]]])
red_hsv = cv2.cvtColor(red, cv2.COLOR_BGR2HSV)
print(red_hsv)#[[[ 0 255 255]]]
blue_min = np.array([100,110,110])
blue_max = np.array([130,255,255])
red_min = np.array([170,150,90])
red_max = np.array([180,255,255])
yellow_min = np.array([26,110,110])
yellow_max = np.array([34,255,255])
blue_mask = cv2.inRange(img_hsv,blue_min,blue_max)
red_mask = cv2.inRange(img_hsv,red_min,red_max)
yellow_mask = cv2.inRange(img_hsv,yellow_min,yellow_max)
# print(blue_mask)
bite_and = cv2.bitwise_or(blue_mask,red_mask)
bite_and = cv2.bitwise_or(bite_and,yellow_mask)
cv2.imshow('a',img)
# cv2.imshow('b',blue_mask)
# cv2.imshow('c',red_mask)
# cv2.imshow('d',yellow_mask)
# cv2.imshow('e',bite_and)
dst = cv2.bitwise_and(img,img,mask=bite_and)
cv2.imshow('f',dst)
cv2.waitKey(0)6.附图,颜色空间取值

本文为看恩吧原创文章,转载无需和我联系,但请注明来自knsay.com