opencv python 4 基本變換
改變色彩空間
cv2.cvtColor()函數可以將圖像在各個色彩空間之間變換,如RGB,BGR,灰度圖像,YUV,HSV等。
dst = cv2.cvtColor(src, code[, dst[, dstCn]])
- dst:輸出圖像
- src:輸入圖像
- code:轉換方式
- dstCn:輸出圖像通道數,默認爲0,根據輸入圖像和轉換方式自動生成
import cv2
img = cv2.imread('a.jpg')
img_cvt = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('image', img_cvt)
cv2.waitKey()
opencv提供了超過150種色彩空間轉換方法:
f = [i for i in dir(cv2) if i.startswith('COLOR_')]
print(f)
輸出爲所有轉換方式。
改變大小
cv2.resize()函數對圖像作制定的大小變換。
dst = cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
- dst:輸出圖像
- src:輸入圖像
- dsize:輸出圖像大小,若爲0則根據fx,fy進行變換
- fx:相對於原圖像的x方向縮放倍數
- fy:相對於原圖像的y方向縮放位數
- interpolation:變換方式,包括:
img = cv2.imread('a.jpg')
height, width = img.shape[:2]
res = cv2.resize(img, (2 * width, 2 * height), interpolation = cv2.INTER_CUBIC)
cv2.imshow('image', res)
cv2.waitKey()
也可不直接設定轉換後的大小而是通過設定fx和fy參數來設置轉換的倍數。
res = cv2.resize(img, None, fx = 2, fy = 2, interpolation = cv2.INTER_CUBIC)
圖像旋轉
對圖像進行旋轉操作首先要使用cv2.getRotationMatrix2D()計算旋轉矩陣。
retval = cv2.getRotationMatrix2D(center, angle, scale)
- center:中心點
- angle:旋轉角度
- scale:縮放倍數
獲取旋轉矩陣後再使用cv2.warpAffine()進行仿射變換。
dst = cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
- dst:輸出圖像
- src:輸入圖像
- M:2x3的變換矩陣
- dsize:輸出圖像大小
- flags:插值方式,默認爲線性插值INTER_LINEAR
- borderMode:設定邊界的方式,默認爲BORDER_CONSTANT
- borderValue:若設定邊界爲常量的取值,默認爲0
img = cv2.imread('a.jpg')
h, w = img.shape[:2]
M = cv2.getRotationMatrix2D((w / 2, h / 2), 90, 1)
dst = cv2.warpAffine(img, M, (w, h))
cv2.imshow('img', dst)
cv2.waitKey()