python 图像刚性变换_【OpenCV+Python】图像缩放旋转平移与几何变换

图像缩放旋转平移

在OpenCV中我们经常会用到图像的缩放,旋转以及平移,比如有的时候我们想对一类图片进行操作,这个时候我们就需要对这一类的图片进行尺寸统一,在以后深度学习的学习中,我们也会发现,对于数据集的训练,它们的数据集样本通常都是尺寸统一的。

▼ 缩放

在OpenCV中,使用函数cv2.resize()实现对图像的缩放。

语法格式为:

dst = cv2.resize( src, dsize[ ,fx[, fy[ ,interpolation]]])

  • src:原图片

  • dsize:缩放图片尺寸,如果dsize=0,默认计算方式如下dsize=Size(round(fx∗src.cols),round(fy∗src.rows))

  • fx fy和dsize不能同时为0 fx,fy分别是在x,y轴上的缩放系数,默认取0时,fx=(double)dsize.width/src.cols ,fy=(double)dsize.height/src.cols,默认参数为0可以不写如里面。

  • interpolation:差值方式使用默认即可。默认的是INTER_LINEAR - a bilinear interpolation (used by default)现行差值,如下图所示。

6f9577661938702c4dbb948117655459.png

我们习惯的坐标表示是:先x横坐标,再y纵坐标。在图像处理中,这种惯性思维经常情况下是错误的。

因为在计算机中,图像是以矩阵的形式保存的,先行后列。所以,一张 宽×高×颜色通道=480×256×3 的图片会保存在一个 256×480×3 的三维张量中。图像处理时也是按照这种思想进行计算的(其中就包括 OpenCV 下的图像处理),即 高×宽×颜色通道。

但是问题来了,cv2.resize这个API却是个小例外。因为它的参数输入却是 宽×高×颜色通道。

我们来看代码:

import cv2pic = cv2.imread("cat.jpg")cv2.imshow("org",pic)pic = cv2.resize(pic, (400, 400), interpolation=cv2.INTER_CUBIC)cv2.imshow('res', pic)cv2.waitKey(0)cv2.destroyAllWindows()

先看原图效果:

6bb04c901dd118c1c7c9c035e3929b13.png

再看缩放之后的效果:

4b6581cc8db85bff89e35ae07abccbea.png

我们发现,用这种方法缩小之后的宽高比跟原图并非一样,现在我们可以进行代码的改进:

import cv2pic = cv2.imread("cat.jpg")cv2.imshow("org",pic)pic = cv2.resize(pic, (0, 0), fx=0.5, fy=0.5,interpolation=cv2.INTER_NEAREST)cv2.imshow('res', pic)cv2.waitKey(0)cv2.destroyAllWindows()

我们直接来看缩放之后的图像:

0891516a5dcdc3d82ec459bb604d21eb.png

在这里,如果我们不直接指定缩放后大小,则通过fx和fy直接指定缩放比例,0.5则长宽都为原来一半。

▼ 旋转

OpenCV中对图像的旋转主要是先通过getRotationMatrix2D函数得到图像的旋转矩阵,然后再通过仿射变换函数warpAffine得到旋转后的图像。

我们看一下函数:

cv2.getRotationMatrix2D(center, angle, scale)

  • center:旋转中心点 (cx, cy) ,你可以随意指定。

  • angle

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值