OpenCV学习8-图像的几何变换,缩放、平移和旋转

'''
图像的缩放
INTER_NEAREST 	最近邻插值
INTER_LINEAR 	双线性插值(默认设置)
INTER_AREA 		使用像素区域关系进行重采样。 它可能是图像抽取的首选方法,因为它会产生无云纹理的
				结果。 但是当图像缩放时,它类似于INTER_NEAREST方法。
INTER_CUBIC 	4x4像素邻域的双三次插值
INTER_LANCZOS4 	8x8像素邻域的Lanczos插值
'''
import cv2 as cv
import numpy as np

img = cv.imread('timg1.jpg')

#缩小到原图像的0.75,下面的 None 本应该是输出图像的尺寸,但是因为后边我们设置了缩放因子
#因此这里为 None
res = cv.resize(img,None,fx=0.75,fy=0.75,interpolation=cv.INTER_CUBIC)

#获取图像的高宽
height,width=img.shape[:2]

#放大两倍,我们直接设置输出图像的尺寸,所以不用设置缩放因子。但如果1.5*width时会报错
#因为高宽是整数类型,乘以小数后可能得到浮点数类型。
res1 = cv.resize(img,(2*width,2*height),interpolation=cv.INTER_LANCZOS4)

#死循环,显示图片
while(1):
	cv.imshow('img',img)
	cv.imshow('res',res)
	cv.imshow('res1',res1)
	#按q键退出
	if cv.waitKey(1) & 0xFF == ord('q'):
		break

##原图
在这里插入图片描述
##缩小
在这里插入图片描述
##放大
在这里插入图片描述

'''
图像的平移
平移就是将对象换一个位置。如果你要沿(x,y)方向移动,移动的距是(tx,ty),你可以以下面的方式构建移动矩阵:

在这里插入图片描述

https://blog.csdn.net/on2way/article/details/40460675
'''
import cv2 as cv
import numpy as np 

img = cv.imread('timg.jpg') 

#构造移动矩阵,[1,0,10]指x轴向右平移10,1表示x轴比例;[0,1,20]指y轴向下平移20,1表示y轴比例,就是说这个移动矩阵
#就是在图像比例不变得基础上,向右平移10,向下平移20.
H = np.float32([[1,0,10],[0,1,20]]) 
#[1,0.05,0] 1表示x轴比例,0.05表示倾斜;[0.1,1,0]1表示y轴比例,0.1表示倾斜
H1 = np.float32([[1,0.05,0],[0.1,1,0]]) 

#获取图像行列树
rows,cols = img.shape[:2] 
#cv2.warpAffine()接受三个参数,需要变换的原始图像,移动矩阵M 以及变换的图像大小(这个大小如果不和
#原始图像大小相同,那么函数会自动通过插值来调整像素间的关系)
#函数 cv2.warpAffine() 的第三个参数的是输出图像的大小,它的格式应该是图像的(宽,高)。应该记住的
#是图像的宽对应的是列数,高对应的是行数。
res = cv.warpAffine(img,H,(cols,rows))
res1 = cv.warpAffine(img,H1,(cols,rows))

cv.imshow('img',img)
cv.imshow('res',res)
cv.imshow('res1',res1)

cv.waitKey(6000)

##原图
在这里插入图片描述
##平移图
在这里插入图片描述
##变形图
变形图

'''
图像的旋转
'''
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190120120034568.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzgzODg4OQ==,size_16,color_FFFFFF,t_70)
````python
import cv2 as cv
import numpy as np 

img = cv.imread('timg.jpg')
#获取图像行列树
rows,cols = img.shape[:2]

# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
# 下面是以原图像中心为旋转后图像的中心,旋转30度,图像缩放比例为0.8。
M=cv.getRotationMatrix2D((cols/2,rows/2),30,0.8)
dst=cv.warpAffine(img,M,(cols,rows))
cv.imshow('img',dst)
cv.waitKey(6000)

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值