永兴的笔记-OpenCV-4简单的图像变换

图像的几何变换是在不改变图像内容的情况下对图像进行空间几何变换。
图片建议单击打开阅读:
在这里插入图片描述
1、图像缩放:
cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)
(提示:当一个参数默认等于None时是可选参数有默认值)

  • src:处理待图像对象
  • dsize:指定待图像 列 和 行 的像素值 (当dsize=None时,图像的缩放由fx与fy决定)
  • dst:处理后的图像对象
  • fx:width方向的缩放比例,如果它是0,那么它就会按照(double)dsize.width/src.cols来计算
  • fy:height方向的缩放比例,如果它是0,那么它就会按照(double)dsize.height/src.rows来计算
  • interpolation:指定插值的方式,图像缩放之后重新计算像素的方式,有以下几种:
命令方式
INTER_NEAREST最邻近插值
INTER_LINEAR双线性插值 (默认)
INTER_CUBIC4x4像素邻域内的双立方插值
INTER_LANCZOS48x8像素邻域内的Lanczos插值
INTER_AREA使用像素区域关系进行重采样
import cv2
img = cv2.imread("first.jpg") #read
imgRe1 = cv2.resize(img,(600,600),interpolation=cv2.INTER_AREA)
imgRe2 = cv2.resize(img,None,fx=0.5,fy=0.5)
cv2.imshow("RE1",imgRe1) #show
cv2.imshow("RE2",imgRe2)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
2、图像平移:
图像平移是将图像沿着指定方向进行移动,在二维平面内主要是沿着x、y轴进行移动。
可以使用OpenCV中的仿射变换函数warpAffine配合自定义矩阵来实现
在这里插入图片描述
cv2.warpAffine(src,M,dsize,dst=None,flags=None,borderValue=None)

  • src: 是指原图像

  • M: mat:是平移矩阵

mat矩阵是一个2行3列矩阵,其中x, y为两个方向所移动的距离

在这里插入图片描述
每个像素点都与这个2x2的矩阵相乘:
在这里插入图片描述

  • dsize:是一个元祖,是平移后图像大小
  • dst:处理后的图像
  • flags:插值的方式
flags插值方式
cv2.INTER_LINEAR线性插值(默认)
cv2.INTER_NEAREST最近邻插值
cv2.INTER_AREA区域插值
cv2.INTER_CUBIC三次样条插值
cv2.INTER_LANCZOS4Lanczos插值
  • borderValue:变换后的边界填充色,BGR格式,默认为黑色
import cv2
import numpy as np
img = cv2.imread("first.jpg")
M = np.float32([[1,0,10],[0,1,10]])
width , height = img.shape[0:2] #获取图像的行和列
imgRe = cv2.warpAffine(img,M,(width+10,height+10),borderValue=(255,255,255))
#M要求为 float 类型 一般使用np.float32
cv2.imshow("Reimg",imgRe)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
3、图像的旋转:
即将图像整体以指定点为中心进行旋转
我们首先获取仿射旋转变换矩阵:
cv2.getRotationMatrix2D(center,angle,scale)

  • center:旋转中心 (一般用图像的 行 和 宽 确定图像中心)
  • angle:旋转的角度
  • scale:缩放程度

然后我们进行仿射变换:
cv2.warpAffine(src,M,dsize,dst=None,flags=None,borderValue=None)

  • src: 是指原图像

  • M: mat:是仿射矩阵

mat矩阵是一个2行3列矩阵,其中x, y为两个方向所移动的距离

在这里插入图片描述
每个像素点都与这个2x2的矩阵相乘:
在这里插入图片描述

  • dsize:是一个元祖,是平移后图像大小
  • dst:处理后的图像
  • flags:插值的方式
flags插值方式
cv2.INTER_LINEAR线性插值(默认)
cv2.INTER_NEAREST最近邻插值
cv2.INTER_AREA区域插值
cv2.INTER_CUBIC三次样条插值
cv2.INTER_LANCZOS4Lanczos插值
  • borderValue:变换后的边界填充色,BGR格式,默认为黑色
import cv2
img = cv2.imread("~/hello.jpg") #read
width , height = img.shape[0:2] #利用切片 获取 行 和 列
M = cv2.getRotationMatrix2D((width/2,height/2),45,0.9) #获取仿射矩阵
imgRo = cv2.warpAffine(img,M,None,borderValue=(255,255,255)) #仿射变换
cv2.imshow("reImg",imgRo)
cv2.imshow("Img",img)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

练习题4:
将一个图像一个以彩色模式读取旋转55度缩小1倍,一个以灰度模式读取旋转32度扩大一倍,并且都向平移y轴平移55个像素,并显示。

评论出你的答案

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值