前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移

[Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移

作者头像
Eastmount
发布于 2021-12-02 13:11:15
发布于 2021-12-02 13:11:15
5.8K00
代码可运行
举报
运行总次数:0
代码可运行

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类、目标检测应用。

前一篇文章介绍Python调用OpenCV实现图像融合、图像加减法、图像逻辑运算和类型转换。这篇文章将详细讲解图像缩放、图像旋转、图像翻转、图像平移。希望文章对您有所帮助,如果有不足之处,还请海涵~

  • 一.图像缩放
  • 二.图像旋转
  • 三.图像翻转
  • 四.图像平移

该系列在github所有源代码:

  • https://github.com/eastmountyxz/ ImageProcessing-Python

一.图像缩放

图像缩放主要调用resize()函数实现,具体如下:

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

其中src表示原始图像,dsize表示缩放大小,fx和fy也可以表示缩放大小倍数,他们两个(dsize或fx\fy)设置一个即可实现图像缩放。例如:

  • result = cv2.resize(src, (160,160))
  • result = cv2.resize(src, None, fx=0.5, fy=0.5)

图像缩放:设(x0, y0)是缩放后的坐标,(x, y)是缩放前的坐标,sx、sy为缩放因子,则公式如下:

代码示例如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#encoding:utf-8
import cv2  
import numpy as np  
 
#读取图片
src = cv2.imread('test.jpg')

#图像缩放
result = cv2.resize(src, (200,100))
print(result.shape)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示,图像缩小为(200,100)像素。

需要注意的是,代码中 cv2.resize(src, (200,100)) 设置的dsize是列数为200,行数为100。

同样,可以获取原始图像像素再乘以缩放系数进行图像变换,代码如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#encoding:utf-8
import cv2  
import numpy as np  
 
#读取图片
src = cv2.imread('test.jpg')
rows, cols = src.shape[:2]
print(rows, cols)

#图像缩放 dsize(,)
result = cv2.resize(src, (int(cols*0.6), int(rows*1.2)))

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示:

最后讲解(fx,fy)缩放倍数的方法对图像进行放大或缩小。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#encoding:utf-8
import cv2  
import numpy as np  
 
#读取图片
src = cv2.imread('test.jpg')
rows, cols = src.shape[:2]
print(rows, cols)

#图像缩放
result = cv2.resize(src, None, fx=0.3, fy=0.3)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

最后输出的结果如下图所示,这是按例比0.3*0.3缩小的。


二.图像旋转

图像旋转主要调用getRotationMatrix2D()函数和warpAffine()函数实现,绕图像的中心旋转,具体如下:

  • M = cv2.getRotationMatrix2D( (cols/2, rows/2), 30, 1) 参数分别为:旋转中心、旋转度数、scale
  • rotated = cv2.warpAffine( src, M, (cols, rows)) 参数分别为:原始图像、旋转参数、原始图像宽高

图像旋转:设(x0, y0)是旋转后的坐标,(x, y)是旋转前的坐标,(m,n)是旋转中心,a是旋转的角度,(left,top)是旋转后图像的左上角坐标,则公式如下:

代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#encoding:utf-8
import cv2  
import numpy as np  
 
#读取图片
src = cv2.imread('test.jpg')

#原图的高、宽 以及通道数
rows, cols, channel = src.shape

#绕图像的中心旋转
#参数:旋转中心 旋转度数 scale
M = cv2.getRotationMatrix2D((cols/2, rows/2), 30, 1)
#参数:原始图像 旋转参数 元素图像宽高
rotated = cv2.warpAffine(src, M, (cols, rows))

#显示图像
cv2.imshow("src", src)
cv2.imshow("rotated", rotated)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示:

如果设置-90度,则核心代码和图像如下所示。

  • M = cv2.getRotationMatrix2D( (cols/2, rows/2), -90, 1)
  • rotated = cv2.warpAffine( src, M, (cols, rows))

三.图像翻转

图像翻转在OpenCV中调用函数flip()实现,原型如下:

  • dst = cv2.flip(src, flipCode)

其中src表示原始图像,flipCode表示翻转方向,如果flipCode为0,则以X轴为对称轴翻转,如果fliipCode>0则以Y轴为对称轴翻转,如果flipCode<0则在X轴、Y轴同时翻转。

代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#encoding:utf-8
import cv2  
import numpy as np
import matplotlib.pyplot as plt
 
#读取图片
img = cv2.imread('test.jpg')
src = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

#图像翻转
#0X轴为对称轴翻转 >0Y轴为对称轴翻转 <0X轴Y轴翻转
img1 = cv2.flip(src, 0)
img2 = cv2.flip(src, 1)
img3 = cv2.flip(src, -1)

#显示图形
titles = ['Source', 'Image1', 'Image2', 'Image3']  
images = [src, img1, img2, img3]  
for i in range(4):  
   plt.subplot(2,2,i+1), plt.imshow(images[i], 'gray')  
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()  

输出结果如下图所示:


四.图像平移

图像平移:设(x0, y0)是缩放后的坐标,(x, y)是缩放前的坐标,dx、dy为偏移量,则公式如下:

图像平移首先定义平移矩阵M,再调用warpAffine()函数实现平移,核心函数如下:

  • M = np.float32([[1, 0, x], [0, 1, y]])
  • shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

完整代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#encoding:utf-8
import cv2  
import numpy as np
import matplotlib.pyplot as plt
 
#读取图片
img = cv2.imread('test.jpg')
image = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

#图像平移 下、上、右、左平移
M = np.float32([[1, 0, 0], [0, 1, 100]])
img1 = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

M = np.float32([[1, 0, 0], [0, 1, -100]])
img2 = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

M = np.float32([[1, 0, 100], [0, 1, 0]])
img3 = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

M = np.float32([[1, 0, -100], [0, 1, 0]])
img4 = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

#显示图形
titles = [ 'Image1', 'Image2', 'Image3', 'Image4']  
images = [img1, img2, img3, img4]  
for i in range(4):  
   plt.subplot(2,2,i+1), plt.imshow(images[i], 'gray')  
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()  

输出结果如下图所示:


五.总结

本文主要讲解Python和OpenCV的图像基础处理,具体内容包括:

  • 一.图像缩放
  • 二.图像旋转
  • 三.图像翻转
  • 四.图像平移

源代码下载地址,记得帮忙点star和关注喔!

  • https://github.com/eastmountyxz/ ImageProcessing-Python

参考文献,在此感谢这些大佬,共勉!

  • [1] 冈萨雷斯. 数字图像处理(第3版)[M]. 电子工业出版社, 2013.
  • [2] 毛星云, 冷雪飞. OpenCV3编程入门[M]. 电子工业出版社, 2015.
  • [3] https://blog.csdn.net/Eastmount
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 娜璋AI安全之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCV+TensorFlow 人工智能图像处理 (2)
[[1, 0, 100], [0, 1, 200]] 转变为2个矩阵: [[1, 0], [0, 1]] 和 [[100], [200]] 分别对应A和B矩阵,原图像为C[x, y] A * C + B = [[1x+0y], [0x+1y]] + [[100], [200]]
YingJoy_
2018/09/14
7440
OpenCV+TensorFlow 人工智能图像处理  (2)
图像仿射
算法:图像仿射是图像通过一系列几何变换实现平移、旋转等多种操作。仿射变换保持图像平直性和平行性。平直性是图像经过仿射变换后,直线仍然是直线。平行性是图像经过仿射变换后,平行线仍然是平行线。
裴来凡
2022/05/28
5060
图像仿射
Python-OpenCV 处理图像(一):基本操作
第一种方式使用cv2.cv的LoadImage、ShowImage和SaveImage函数
bear_fish
2018/09/19
1.8K0
OpenCV图像几何变换专题(缩放、翻转、仿射变换及透视)【python-Open_CV系列(五)】
OpenCV图像几何变换专题(缩放、翻转、仿射变换及透视)(python为工具) 【Open_CV系列(五)】
全栈程序员站长
2022/11/16
1.1K0
OpenCV图像几何变换专题(缩放、翻转、仿射变换及透视)【python-Open_CV系列(五)】
机器学习-09-图像处理02-PIL+numpy+OpenCV实践
开源地理空间基金会中文分会 Pillow (PIL Fork) 10.0.1 文档
用户2225445
2024/04/14
5310
机器学习-09-图像处理02-PIL+numpy+OpenCV实践
【图像篇】OpenCV图像处理(七)---图像平移VS图像旋转
牛顿第一运动定律:物体加速度的大小跟作用力成正比,跟物体的质量成反比,且与物体质量的倒数成正比;加速度的方向跟作用力的方向相同。该定律是由艾萨克·牛顿在1687年于《自然哲学的数学原理》一书中提出的。
用户5410712
2022/06/01
1.3K0
【图像篇】OpenCV图像处理(七)---图像平移VS图像旋转
07: 图像几何变换
缩放就是调整图片的大小,使用cv2.resize()函数实现缩放。可以按照比例缩放,也可以按照指定的大小缩放:
CodecWang
2021/12/07
8060
07: 图像几何变换
[Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类、目标检测应用。
Eastmount
2022/11/25
2.3K0
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
在当今数字化社会中,图像处理 和 计算机视觉 技术应用广泛,从日常的图像编辑、滤镜应用到专业的智能安防、自动驾驶等领域,这些技术无处不在。对于开发者来说,OpenCV 是一个功能强大的库,提供了各种图像处理和计算机视觉的工具,广泛用于 Python 开发中。
半截诗
2024/10/09
3.5K1
Open-CV图像处理
图像的仿射变换涉及到图像的形状位置角度的变化,是深度学习预处理中常到的功能,仿射变换主要是对图像的缩放,旋转,翻转和平移等操作的组合。
shaoshaossm
2022/12/26
2420
Open-CV图像处理
计算机视觉:6.2~6.5 图像的基本变换与仿射变换
图像的基本变换与仿射变换 6.2 图像的翻转和旋转 图像的翻转 flip(src, flipCode) flipCode=0:上下翻转; flipCode>0:左右翻转; flipCode<0:上下 + 左右翻转; # 图像的翻转 import cv2 import numpy as np # 读取图片 doge = cv2.imread('./doge.jpg') new_doge1 = cv2.flip(doge, flipCode=0) new_doge2 = cv2.flip(doge, fl
DioxideCN
2022/08/05
7870
计算机视觉:6.2~6.5 图像的基本变换与仿射变换
Python-OpenCV(6)
本文介绍了OpenCV中的几何变换,包括平移、缩放、旋转、仿射变换和透视变换。同时,还介绍了在Python中使用OpenCV库进行几何变换的方法和示例。
GavinZhou
2018/01/02
1K0
Python-OpenCV(6)
OpenCV图像处理(八)---图像缩放VS图像翻转
牛顿第三运动定律的常见表述是:相互作用的两个物体之间的作用力和反作用力总是大小相等,方向相反,作用在同一条直线上。该定律是由艾萨克·牛顿在1687年于《自然哲学的数学原理》一书中提出的。牛顿第三运动定律和第一、第二定律共同组成了牛顿运动定律,阐述了经典力学中基本的运动规律。
用户5410712
2022/06/01
7670
OpenCV图像处理(八)---图像缩放VS图像翻转
图像变换
缩放 import cv2 from matplotlib import pyplot as plt image = cv2.imread("1.jpg") #转换颜色通道 b, g, r = cv2
跋扈洋
2021/02/02
4450
图像变换
opencv仿射变换之图像平移
仿射变换是图像旋转,缩放,平移的总称。具体的做法是通过一个矩阵和原图坐标进行计算,得到新的坐标,完成变换。所以关键就是这个矩阵。
淼学派对
2023/10/14
2110
opencv仿射变换之图像平移
万字长文告诉新手如何学习Python图像处理(上篇完结 四十四) | 「Python」有奖征文
期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~
全栈程序员站长
2022/11/04
2.1K0
万字长文告诉新手如何学习Python图像处理(上篇完结 四十四) | 「Python」有奖征文
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:
红目香薰
2023/02/10
8470
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
【OpenCV】Chapter3.图像的仿射变换
仿射变换其实包含了一系列的操作:平移,缩放,旋转等,不过所有的操作都可以通过这个仿射变换矩阵来实现。
zstar
2022/09/22
1.2K0
【OpenCV】Chapter3.图像的仿射变换
python——opencv入门(一)
和Python一样,当前的OpenCV也有两个大版本,OpenCV2和OpenCV3。相比OpenCV2,OpenCV3提供了更强的功能和更多方便的特性。不过考虑到和深度学习框架的兼容性,以及上手安装的难度,这部分先以2为主进行介绍。
py3study
2020/01/13
9380
OpenCV Python 系列教程 4 - OpenCV 图像处理(上)
HSV 的色相范围为 [0,179],饱和度范围为 [0,255],值范围为 [0,255]。不同的软件使用不同的规模。
机器视觉CV
2019/07/15
3.1K0
OpenCV Python 系列教程 4 - OpenCV 图像处理(上)
推荐阅读
相关推荐
OpenCV+TensorFlow 人工智能图像处理 (2)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文