OpenCV-Python图像的几何变换

几何变换是指改变图像的几何结构,例如大小、角度和形状等,让图像呈现出缩放、翻转、映射和透视效果。

1、缩放

dsize参数实现缩放

import cv2

img = cv2.imread("logo.jpg")
dst1 = cv2.resize(img,(100,100))  # 按照宽100像素、高100像素的大小进行缩小
dst2 = cv2.resize(img,(400,400))  # 按照宽400像素、高400像素的大小进行缩小
cv2.imshow("img",img)
cv2.imshow("dst1",dst1)
cv2.imshow("dst2",dst2)
cv2.waitKey()

fx和fy参数实现缩放

import cv2

img = cv2.imread("logo.jpg")
dst3 = cv2.resize(img,None,fx = 1/3,fy = 1/2)
dst4 = cv2.resize(img,None,fx = 2,fy = 2)
cv2.imshow("1",img)
cv2.imshow("2",dst3)
cv2.imshow("3",dst4)
cv2.waitKey()

2、翻转

import cv2

img = cv2.imread("logo.jpg")
dst1 = cv2.flip(img,0)  # 沿X轴翻转
dst2 = cv2.flip(img,1)  # 沿Y轴翻转
dst3 = cv2.flip(img,-1)  # 同时沿X轴、Y轴翻转
cv2.imshow("1",img)
cv2.imshow("2",dst1)
cv2.imshow("3",dst2)
cv2.imshow("4",dst3)
cv2.waitKey()

3、平移

让图像向右下方平移

import cv2
import numpy as np

img = cv2.imread("logo.jpg")
rows = len(img)
cols = len(img[0])
M = np.float32([[1,0,50],[0,1,100]])
dst = cv2.warpAffine(img,M,(cols,rows))
cv2.imshow("1",img)
cv2.imshow("2",dst)
cv2.waitKey()

4、旋转

让图像逆时针旋转

import cv2

img = cv2.imread("logo.jpg")
rows = len(img)
cols = len(img[0])
center = (rows/2,cols/2)
M = cv2.getRotationMatrix2D(center,30,0.8)
dst = cv2.warpAffine(img,M,(cols,rows))
cv2.imshow("1",img)
cv2.imshow("2",dst)
cv2.waitKey()

5、倾斜

让图像向右倾斜

import cv2
import numpy as np

img = cv2.imread("logo.jpg")
rows = len(img)
cols = len(img[0])
p1 = np.zeros((3,2),np.float32)
p1[0] = [0,0]
p1[1] = [cols-1,0]
p1[2] = [0,rows-1]
p2 = np.zeros((3,2),np.float32)
p2[0] = [50,0]
p2[1] = [cols-1,0]
p2[2] = [0,rows-1]
M = cv2.getAffineTransform(p1,p2)
dst = cv2.warpAffine(img,M,(cols,rows))
cv2.imshow("1",img)
cv2.imshow("2",dst)
cv2.waitKey()

6、透视

模拟从底部观察图像得到的透视效果

import cv2
import numpy as np

img = cv2.imread("logo.jpg")
rows = len(img)
cols = len(img[0])
p1 = np.zeros((4,2),np.float32)
p1[0] = [0,0]
p1[1] = [cols - 1,0]
p1[2] = [0,rows-1]
p1[3] = [cols-1,rows-1]
p2 = np.zeros((4,2),np.float32)
p2[0] = [90,0]
p2[1] = [cols-90,0]
p2[2] = [0,rows-1]
p2[3] = [cols-1,rows-1]
M = cv2.getPerspectiveTransform(p1,p2)
dst = cv2.warpPerspective(img,M,(cols,rows))
cv2.imshow("1",img)
cv2.imshow("2",dst)
cv2.waitKey()

7、小结

图像的缩放有2种方式:一种是设置dsize参数,另一种是设置fx参数和fy参数。图像的翻转有三种方式,沿X轴翻转、沿Y轴翻转,这三种方式均由flipCode参数的值决定。图像的仿射变换取决于仿射矩阵,采用不同的仿射矩阵(M),就会使图像呈现不同的仿射效果。此外,图像的透视仍然要依靠M矩阵实现。
因此,只要熟练掌握并灵活运用M矩阵,就能够得心应手地对图像进行几何变换操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值