在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会发现我们经常用到的也就两种:BGR↔Gray 和 BGR↔HSV。
cv2.cvtColor()函数:转换颜色空间。
第一个参数表示待转换的图片。
第二个参数表示转换的类型。
例:
import cv2 #以彩色图像的格式读取图片 img =cv2.imread("../data/image/4.png",cv2.IMREAD_COLOR) #转换位灰度图像 img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转换到HSV img_HSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) cv2.imshow("gray",img_gray) cv2.imshow("HSV",img_HSV) cv2.waitKey()
注意:在 OpenCV 的 HSV 格式中,H(色彩/色度)的取值范围是 [0,179], S(饱和度)的取值范围 [0,255],V(亮度)的取值范围 [0,255]。但是不同的软件使用的值可能不同。所以当你需要拿 OpenCV 的 HSV 值与其他软件的 HSV 值进行对比时,一定要记得归一化。
将一副图片从BGR转换位HSV,利用这一点来提取某个特定颜色的物体。在HSV颜色空间中要比在BGR空间中更容易表示一个特定颜色。
例:提取一个蓝色的物体
import cv2 import numpy as np img =cv2.imread("../data/image/7.png") #转换为HSV img_HSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #设置蓝色的阈值 lower_blue = np.array([110,50,50]) upper_blue= np.array([130,255,255]) #根据阈值构建掩膜 mask = cv2.inRange(img_HSV,lower_blue,upper_blue) #对原图和掩膜进行位运算 img_res = cv2.bitwise_and(img,img,mask = mask) cv2.imshow("img",img) cv2.imshow("HSV",img_HSV) cv2.imshow("mask",mask) cv2.imshow("res",img_res) cv2.waitKey()
cv2.inRange()函数:检查数组元素是否位于其他两个数组的元素之间。即检查图像上中的每个像素点,如果像素点的值在设置的范围之间,则将该点设置为白色,否则为黑色,返回一幅黑白的图像。
第一个参数表示待检查的图像。
第二个参数表示下边界数组或者标量。
第三个参数表示上边界数组或者标量。