【OpenCV + Python】几何变换

38 篇文章 0 订阅

图像进行各种几个变换,例如移动,旋转,仿射变换等:

OpenCV 提供了两个变换函数, cv2.warpAffine 和 cv2.warpPerspective,使用这两个函数你可以实现所有类型的变换。 cv2.warpAffine 接收的参数是2 × 3 的变换矩阵,而 cv2.warpPerspective 接收的参数是 3 × 3 的变换矩阵。

cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
其中:
src - 输入图像。
M - 变换矩阵。
dsize - 输出图像的大小,这个是输入参数
flags - 插值方法的组合(int 类型!)
borderMode - 边界像素模式(int 类型!)
borderValue - (重点!)边界填充值; 默认情况下,它为0。

flages表示插值方式,默认为 flags=cv2.INTER_LINEAR,表示线性插值,此外还有:cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA (区域插值) cv2.INTER_CUBIC(三次样条插值) cv2.INTER_LANCZOS4(Lanczos插值)
在这里插入图片描述
cv2.getRotationMatrix2D(center, angle, scale) #正为逆时针,负值为正时针
函数有三个参数:
center:图片的旋转中心
angle:旋转角度
scale:缩放比例,该例中0.5表示我们缩小一半

旋转实例:

import cv2
import numpy as np
img=cv2.imread('messi5.jpg',0)
rows,cols=img.shape
#这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
#可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)  **#正为逆时针,负值为正时针**
#第三个参数是输出图像的尺寸中心
dst=cv2.warpAffine(img,M,(2*cols,2*rows))
while(1):
    cv2.imshow('img', img)
    cv2.imshow('img1',dst)
    if cv2.waitKey(1)&0xFF==27:
        break
cv2.destroyAllWindows()

在这里插入图片描述
仿射变换:

import cv2
import numpy as np
import matplotlib.pyplot as plt

from matplotlib import pyplot as plt
img=cv2.imread('drawing.png',1)
rows,cols,ch=img.shape
pts1=np.float32([[50,50],[200,50],[50,200]])
pts2=np.float32([[10,100],[200,50],[100,250]])
M=cv2.getAffineTransform(pts1,pts2)
dst=cv2.warpAffine(img,M,(cols,rows))

plt.figure(figsize=(10,5)) #设置窗口大小
plt.suptitle('Multi_Image') # 图片名称
plt.subplot(1,2,1), plt.title('image')
plt.imshow(img), plt.axis('off')
plt.subplot(1,2,2), plt.title('war')
plt.imshow(dst), plt.axis('off')
plt.show()

在这里插入图片描述
透视变换:

import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('drawing.png',1)
rows,cols,ch=img.shape
pts1 = np.float32([[178,114],[547,124],[230,380],[503,409]])
pts2 = np.float32([[0,0],[730,0],[0,488],[730,488]])
M=cv2.getPerspectiveTransform(pts1,pts2)
dst=cv2.warpPerspective(img,M,(703,488))
plt.figure(figsize=(20,10)) #设置窗口大小
plt.suptitle('Multi_Image') # 图片名称
plt.subplot(1,2,1), plt.title('image')
plt.imshow(img)
plt.subplot(1,2,2), plt.title('output')
plt.imshow(dst)
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖子工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值