永兴的笔记-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_CUBIC 4x4像素邻域内的双立方插值
INTER_LANCZOS4 8x8像素邻域内的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_LANCZOS4 Lanczos插值
  • 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_LANCZOS4 Lanczos插值
  • 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个像素,并显示。

评论出你的答案

发布了45 篇原创文章 · 获赞 28 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/m0_43505377/article/details/103750874
今日推荐