OpenCV3 Python3圖片旋轉(zhuǎn)處理詳解
圖片處理中經(jīng)常用到的旋轉(zhuǎn)操作,在OpenCV3中提供了`getRotationMatrix2D`和`warpAffine`函數(shù),用于計(jì)算仿射矩陣M以及進(jìn)行仿射變換。雖然仿射矩陣聽(tīng)起來(lái)很復(fù)雜,但在實(shí)際應(yīng)
圖片處理中經(jīng)常用到的旋轉(zhuǎn)操作,在OpenCV3中提供了`getRotationMatrix2D`和`warpAffine`函數(shù),用于計(jì)算仿射矩陣M以及進(jìn)行仿射變換。雖然仿射矩陣聽(tīng)起來(lái)很復(fù)雜,但在實(shí)際應(yīng)用中只需掌握相關(guān)參數(shù)即可。
Opencv旋轉(zhuǎn)原理
利用Opencv進(jìn)行圖片旋轉(zhuǎn),從數(shù)學(xué)角度來(lái)看就是通過(guò)仿射矩陣進(jìn)行變換。具體的原理可以通過(guò)搜索“仿射矩陣 旋轉(zhuǎn)”來(lái)深入了解。簡(jiǎn)單來(lái)說(shuō),任意的仿射變換可以表示兩幅圖像之間的關(guān)系,包括旋轉(zhuǎn)(線性變換)、平移(向量加)和縮放操作(線性變換)。因此,如果我們知道兩幅圖像A、B之間的仿射矩陣M(通常用2X3矩陣表示),就可以通過(guò)仿射變換將A轉(zhuǎn)變成B。
Opencv旋轉(zhuǎn)步驟
1. 使用`getRotationMatrix2D`計(jì)算M矩陣或者使用`getAffineTransform`;
2. 使用`warpAffine`進(jìn)行仿射變換;
3. 顯示結(jié)果。
getRotationMatrix2D參數(shù)說(shuō)明
- `center`: 旋轉(zhuǎn)的中心點(diǎn),一般設(shè)為圖片中心;
- `angle`: 旋轉(zhuǎn)的角度;
- `scale`: 縮放因子。
warpAffine參數(shù)說(shuō)明
- `src`: 源圖像;
- `M`: 仿射矩陣;
- `dsize`: 輸出尺寸;
- `flags`: 插值算法,默認(rèn)為`_LINEAR`;
- `borderMode`: 邊界處理方式;
- `borderValue`: 外邊界顏色,默認(rèn)為黑色。
示例代碼
```python
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img ('')
rows, cols, channel
M ((0, 0), 0, 0.5) 旋轉(zhuǎn)中心點(diǎn)為坐標(biāo)(0,0)
dst cv.warpAffine(img, M, (cols, rows)) 默認(rèn)黑色填充
旋轉(zhuǎn)60度并修改填充色
M ((cols/2, rows/2), 60, 0.5) 中心點(diǎn)(cols/2, rows/2),角度60
dst cv.warpAffine(img, M, (cols, rows), borderValue(255,255,255)) 修改填充色
('img', dst)
cv.waitKey(0)
```
插值方法選擇
根據(jù)實(shí)際需求設(shè)置插值方法,可以更好地處理旋轉(zhuǎn)后的圖像效果。在不同場(chǎng)景下選擇合適的插值方法非常重要。
通過(guò)以上介紹,希望能幫助您更好地理解OpenCV3 Python3圖片旋轉(zhuǎn)處理過(guò)程,并靈活運(yùn)用于實(shí)際項(xiàng)目中。