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