Image——Transfrom

Similarity Transform

平移旋转
公式如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191017112442157.png在这里插入图片描述

getRotationMatrix2D函数

**主要用于获取图像环绕某一点的旋转矩阵
函数调用形式:
Mat getRotationMatrix2D(Point2f center, double angle, double scale)
参数详解:
Point2f center:表示旋转的中心点
double angle:表示旋转的角度
double scale:图像缩放因子

warpAffine函数

对图像实现仿射变换
void cv::warpAffine ( InputArray src,
OutputArray dst,
InputArray M,
Size dsize,
int flags = INTER_LINEAR,
int borderMode = BORDER_CONSTANT,
const Scalar & borderValue = Scalar()
)
参数解释
. src: 输入图像
. dst: 输出图像,尺寸由dsize指定,图像类型与原图像一致
. M: 2X3的变换矩阵
. dsize: 指定图像输出尺寸
. flags: 插值算法标识符,有默认值INTER_LINEAR,如果插值算法为WARP_INVERSE_MAP, warpAffine函数使用如下矩阵进行图像转换

程序

def similarity_transform(point,angle,scale,ig):
    M = cv2.getRotationMatrix2D(point,angle,scale)
    img_rotate = cv2.warpAffine(img,M, (img.shape[1],img.shape[0]))
    return img_rotate

img = cv2.imread("lenna.jpg",1)
cv2.imshow("initial",img)
img_rotate = similarity_transform((img.shape[1]//2,img.shape[0]//2),30,0.5,img)
cv2.imshow("ROtate",img_rotate)

旋转前的图片
在这里插入图片描述
旋转后的图片
在这里插入图片描述

Affine Transform

将矩形的图像变换为其他的规则图像譬如平行四边形
公式如下:
在这里插入图片描述
在这里插入图片描述
程序:

def affine_transform(img):
    cols = img.shape[1]
    rows = img.shape[0]
    pst1 = np.float32([[0,0],[cols-1,0],[0,rows-1]])
    pst2 = np.float32([[cols * 0.2, rows * 0.1],[cols * 0.9, rows * 0.2], [cols*0.2, rows*0.9]])
    M = cv2.getAffineTransform(pst1,pst2)
    dst = cv2.warpAffine(img, M , (cols,rows))
    return dst
img = cv2.imread("lenna.jpg",1)
cv2.imshow("initial",img)
img_affine = affine_transform(img)
cv2.imshow("Affine", img_affine)

原图:
在这里插入图片描述
进行仿射变换后的图像:
在这里插入图片描述

Perspective Transform

在这里插入图片描述

有两项注意点。

8个自由度(即四对点)
在这里插入图片描述
在计算时, p的行列式为1
在这里插入图片描述

程序

def perspective_transfoem(img):
    pst1 = np.float32([[514,357],[708,365],[737,568],[505,556]])
    pst2 = np.float32([[0,0],[300,0],[300,300],[0,300]])
    M = cv2.getPerspectiveTransform(pst1,pst2)
    img_per = cv2.warpPerspective(img, M,(301,301))
    return img_per

img = cv2.imread("1.jpg",1)
cv2.imshow("initial",img)
img_per = perspective_transfoem(img)
cv2.imshow("perspective",img_per)

原图:
在这里插入图片描述
投影变换后的图像
在这里插入图片描述

总结

三种变换的区别是前两种是平面上进行变换,最后一种是空间上进行变换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值