openCV几何变换

#图像的几何变换:移动,旋转,仿射变换等
#主要的函数:cv2.getPerspectiveTransfrom
#openCV提供变换的函数是:cv2.wrapAffine(2*3的矩阵)  or  cv2.wrapPerspective(3*3的矩阵)

'''
#1.扩展缩放
#提供函数是:cv2.resize(src, dst, interpolation = CV_INTER_LINEAR)
#在函数cv2.resize()中尺寸大小可以自己设置,也可以使用缩放因子
#缩放因子:
#缩放:cv2.INTER_AREA()
#扩展:cv2.INTER_CUBIC()(慢) or cv2.INTER_LINEAR()(默认情况)

import cv2
import numpy as np
img = cv2.imread('test.jpg')
res = cv2.resize(img, None, fx = 2, fy = 2, interpolation = cv2.INTER_CUBIC)#None已经有了缩放因子,无需尺寸

height, width = img.shape[:2]
res = cv2.resize(img, (2*width, 2*height), interpolation = cv2.INTER_CUBIC)#已经有了尺寸

while(1):
    cv2.imshow('res', res)
    cv2.imshow('image', img)

    cv2.waitKey(0)
cv2.destroyAllWindows()
'''

'''
#2.平移和旋转
#平移的函数:cv2.warpAffine()
#旋转的函数:cv2.getRotationMatrix2D(旋转中心, 旋转角度, 缩放因子)
import cv2
import numpy as np
res = cv2.imread('test1.png', 0)
rows, cols = res.shape#获取图片的属性
ans = cv2.getRotationMatrix2D((cols/2, rows/2), 90, 0.3)#旋转图片,旋转中心,旋转角度,缩放因子
dst = cv2.warpAffine(res, ans, (2*cols, 2*rows))#平移,第三个参数是图片大小,(宽,高)
cv2.imshow('res', res)
cv2.imshow('ans'," ans)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()"
'''

#3.变换
#对于平面区域,有两种方式的几何转换:一种是基于2×3矩阵进行的变换,叫仿射变换;另一种是基于3×3矩阵进行的变换,叫透视变换或者单应性映射
'''
#仿射变换:原图直线平行,后图直线也平行,基于2×3矩阵进行的变换。需要从原图像中找到三个点以及他们在输出图像中的位置。
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('test.jpg')
rows, cols = img.shape[:2]
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])
# 类似于构造矩阵
M = cv2.getAffineTransform(pts1, pts2)
res = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow('原图', img)
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
'''
#2透视变换
#在变换前后直线还是直线,是基于3×3矩阵进行的变换,要在图像中找到4个点及他们在输出图像上对应位置,这四个点中任意三个点不可以共线
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('test.jpg')
rows, cols = img.shape[:2]
pts1 = np.float32([[56, 65], [238, 52], [28, 237], [239, 240]])
pts2 = np.float32([[0, 0], [200, 0], [0, 200], [200, 200]])
M = cv2.getPerspectiveTransform(pts1, pts2)
res = cv2.warpPerspective(img, M, (cols, rows))
cv2.imshow('yuantu', img)
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值