- 颜色空间转换: 需要cv2.cvtColor(),cv2.inRange() 等。
转换的方法经常用到的就两种:BGR↔Gray 和 BGR↔HSV。用到的函数是cv2.cvtColor(input_image,flag),其中flag 就是转换类型。 (cv2.COLOR_BGR2GRAY和cv2.COLOR_BGR2HSV)
注意:在 OpenCV 的 HSV 格式中,H(色彩/色度)的取值范围是 [0,179], S(饱和度)的取值范围 [0,255],V(亮度)的取值范围 [0,255]。但是不同的软件使用的值可能不同。所以当你需要拿 OpenCV 的 HSV 值与其他软 件的 HSV 值进行对比时,一定要记得归一化!
应用:物体跟踪 ----我们知道怎样将一幅图像从 BGR 转换到 HSV 了,利用这一点来提取带有某个特定颜色的物体。在 HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。在我们的程序中,我们要提取的是一个蓝色的物体。
步骤:
• 从视频中获取每一帧图像
• 将图像转换到 HSV 空间
• 设置 HSV 阈值到蓝色范围。
• 获取蓝色物体,我们还可以做其他任何我们想做的事,比如:在蓝色物体周围画一个圈。
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while (1):
ret, frame = cap.read() # 获取每一帧
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 转换到HSV
# 设定蓝色的阈值
lower_blue = np.array([110, 50, 50])
upper_blue = np.array([130, 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()
- 几何变化
1)扩展缩放: cv2.resize()
用于改变图像的尺寸大小。OpenCV 提供的函数 ,缩放时使用cv2.INTER_AREA, 在扩展时使用 v2.INTER_CUBIC(慢) 和 v2.INTER_LINEAR.
import cv2
import numpy as np
img=cv2.imread('messi5.jpg')
#法一:None 本应该是输出图像的尺寸,但是因为后边我们设置了缩放因子,因此这里为 None
res=cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
#法二:直接设置输出图像的尺寸,所以不用设置缩放因子
height,width=img.shape[:2]
res=cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
while(1):
cv2.imshow('res',res)
cv2.imshow('img',img)
if cv2.waitKey(1) & 0xFF == 27:
break
cv2.destroyAllWindows()
2)平移 :cv2.warpAffine()<