目录
转换颜色空间
在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会发现我们经常用到的也就两种:BGR↔Gray 和 BGR↔HSV。
cv2.cvtColor()函数:转换颜色空间。
第一个参数表示待转换的图片。
第二个参数表示转换的类型。
- cv2.COLOR_BGR2GRAY:表示从BGR转换位灰度图像。
- cv2.COLOR_BGR2HSV:表示从BGR转换位HSV。
例:
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()函数:检查数组元素是否位于其他两个数组的元素之间。即检查图像上中的每个像素点,如果像素点的值在设置的范围之间,则将该点设置为白色,否则为黑色,返回一幅黑白的图像。
第一个参数表示待检查的图像。
第二个参数表示下边界数组或者标量。
第三个参数表示上边界数组或者标量。