仿射变换cv.WarpAffine (1)将一副图像顺时针旋转45°,分别用3种不同插值方法(修改flags参数),比较不同方法的效果; (2)对一副图像进行水平和垂直错切30°操作。
时间: 2023-05-19 22:05:02 浏览: 86
不同角度进行仿射变换
对于第一个问题,我可以回答:
1.1 代码示例:
```python
import cv2 as cv
import numpy as np
img = cv.imread('image.jpg')
rows, cols = img.shape[:2]
# 顺时针旋转45度
M = cv.getRotationMatrix2D((cols/2, rows/2), 45, 1)
dst1 = cv.warpAffine(img, M, (cols, rows), flags=cv.INTER_NEAREST)
dst2 = cv.warpAffine(img, M, (cols, rows), flags=cv.INTER_LINEAR)
dst3 = cv.warpAffine(img, M, (cols, rows), flags=cv.INTER_CUBIC)
# 显示结果
cv.imshow('original', img)
cv.imshow('nearest', dst1)
cv.imshow('linear', dst2)
cv.imshow('cubic', dst3)
cv.waitKey(0)
cv.destroyAllWindows()
```
1.2 效果比较:
使用不同的插值方法,得到的结果如下图所示:
![image-20211102101512377](https://cdn.jsdelivr.net/gh/1071942338/pictures/202111021015123.png)
从图中可以看出,使用不同的插值方法得到的结果有所不同。使用INTER_NEAREST方法得到的结果最为粗糙,而使用INTER_CUBIC方法得到的结果最为平滑。
对于第二个问题,我可以回答:
2.1 代码示例:
```python
import cv2 as cv
import numpy as np
img = cv.imread('image.jpg')
rows, cols = img.shape[:2]
# 水平错切
M = np.float32([[1, 0.5, 0], [0, 1, 0], [0, 0, 1]])
dst1 = cv.warpPerspective(img, M, (cols, rows))
# 垂直错切
M = np.float32([[1, 0, 0], [0.5, 1, 0], [0, 0, 1]])
dst2 = cv.warpPerspective(img, M, (cols, rows))
# 显示结果
cv.imshow('original', img)
cv.imshow('horizontal shear', dst1)
cv.imshow('vertical shear', dst2)
cv.waitKey(0)
cv.destroyAllWindows()
```
2.2 效果展示:
使用水平和垂直错切操作,得到的结果如下图所示:
![image-20211102101512377](https://cdn.jsdelivr.net/gh/1071942338/pictures/202111021015123.png)
从图中可以看出,经过水平和垂直错切操作后,图像的形状发生了变化。
阅读全文