CV00-03-CV基本操作2

基本操作2

Similarity Transform相似变换

Similarity Transform相似变换:图像形状大小不变,位置发生变化。比如:做平移、旋转。相似变换具有保角性、保比例性,经过相似变换以后原有的角度和比例保持不变。确定一个相似变换矩阵需要2对点(原图像2个点,对应变换后图像2个点)。OpenCV中相似变换的API如下。

import cv2

IMG = cv2.imread('lena.jpg', 1)
# 获取旋转矩阵,旋转中心、角度、缩放值
M = cv2.getRotationMatrix2D((IMG.shape[1] / 2, IMG.shape[0] / 2), 30, 0.7)
# 再通过旋转矩阵M求得变换后的图像
IMG_ROTATE = cv2.warpAffine(IMG, M, (IMG.shape[1], IMG.shape[0]))
cv2.imshow('lena', IMG)
cv2.imshow('lena_rotation', IMG_ROTATE)
key = cv2.waitKey()
if key == 27:
    cv2.destroyAllWindows()
    pass

Affine Transform仿射变换

Affine Transform仿射变换:图像形状变为平行四边形、旋转的平行四边形。还是在一个平面内的变换。确定一个仿射变换矩阵需要3对点(原图像3个不在同一直线上的点、对应变换后图像3个点)。OpenCV中仿射变换的API如下。

import cv2
import numpy as np

IMG = cv2.imread('lena.jpg', 1)
height = IMG.shape[0]
width = IMG.shape[1]
# 变换前图像上3个点pts1和对应的变换后图像上3个点pts2
pts1 = np.float32([[0, 0], [width - 1, 0], [0, height - 1]])
pts2 = np.float32([[width * 0.2, height * 0.1], [width * 0.9, height * 0.2], [width * 0.1, height * 0.9]])
# 获取放射变换矩阵
M = cv2.getAffineTransform(pts1, pts2)
IMG_AFFINE = cv2.warpAffine(IMG, M, (width, height))

cv2.imshow('image', IMG)
cv2.imshow('image_affine', IMG_AFFINE)
key = cv2.waitKey()
if key == 27:
    cv2.destroyAllWindows()
    pass

Perspective Transform透视变换

Perspective Transform透视变换:在3D条件下的变换,图像变为平行四边形或旋转的平行四边形,但图片与屏幕呈现角度。确定一个透视变换需要4对点。OpenCV中API调用如下。

import cv2
import numpy as np

IMG = cv2.imread('lena.jpg', 1)
height = IMG.shape[0]
width = IMG.shape[1]

pts1 = np.float32([[0, 0],
                   [0, width - 1],
                   [height - 1, 0],
                   [height - 1, width - 1]])
pts2 = np.float32([[height * 0.1, width * 0.15],
                   [height * 0.2, width * 0.73],
                   [height * 0.78, width * 0.11],
                   [height * 0.82, width * 0.86]])
M = cv2.getPerspectiveTransform(pts1, pts2)
IMG_PERSPECTIVE = cv2.warpPerspective(IMG, M, (height, width))

cv2.imshow('image', IMG)
cv2.imshow('image_perspective', IMG_PERSPECTIVE)
key = cv2.waitKey()
if key == 27:
    cv2.destroyAllWindows()
    pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

苦行僧(csdn)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值