子豪 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

OpenCV是一个跨平台计算机视觉和机器学习算法库。

它不仅能用来实现各种复杂的算法,还能够对图像进行预处理:包括图像的平移、旋转、缩放、翻转、裁剪。

最近一位来自印度的小哥Raoof Naushad发布了一篇相关教程,希望把这些知识分享给初学者。

图像平移

我们使用OpenCV提供的仿射变换函数cv.warpAffine()沿x和y轴移动图像。

Step1. 调用一个函数cv.warpAffine()。

Step2. 创建一个平移矩阵,这一步需要借助NumPy进行。

Step3. 将img(需要变换的图像)、transMAT(平移矩阵)和Dimensions(维度)代入仿射变换函数cv.warpAffine(),输入x和y以确定平移多少。

向左、向上移动,则x、y设为负数,反之则为正数。

Step4. 采用cv.imshow()函数显示图像。

## Translation
def translation(img,x,y):tranMAT = np.float32([[1,0,x],[0,1,y]])dimensions = (img.shape[1],img.shape[0])return cv.warpAffine(img,transMAT,dimensions)
translated = translation(img,-100,100)
cv.imshow("Translated",translated)
cv.waitKey(0)

图像旋转

在OpenCV中旋转图像,可以将任何点用作旋转的中心,同样使用cv.warpAffine()函数以及和上面相同的参数。但是旋转矩阵与图像平移是不同的。

Step1. 创建一个旋转函数,定义图像img、旋转角度angle和旋转点rotPoint。

Step2. 利用cv.getRotationMatrix2D()(矩阵旋转与缩放)创建一个旋转矩阵rotMAT,其中包括旋转点、旋转角度和比例因子。如果不需要比例因子,则将其设为1.0。

Step3. 输入旋转角度、旋转点对应数值。(如不需要设置旋转点,则在Step1中设为空值None)

## Rotation
def rotate(img,angle,rotPoint=None):(height,width) = img,shape[:2]if rotPoint is None:rotPoint = (width//2,height//2)rotMAT = cv.getRotationMatrix2D(rotPoint,angle,1.0)dimension = (width,height)return cv.warpAffine(img,rotMat,dimension)rotated = rotated(img,20)
cv.imshow("Rotated",rotated)
cv.waitKey(0)

图片缩放

在OpenCV中需要用到函数cv.resize(img, (500, 500), interpolation=cv.INTER_LINEAR)。

根据缩小或放大图像的需要,参数指定插值方法可以选择cv.INTER_AREA(区域插值)、cv.INTER_CUBIC(三次样条插值)、cv.INTER_LINEAR(线性插值)。

如需放大图像,可以采用<> INTER_LINEAR(效率较高)或INTER_CUBIC(效率较低);
如需缩小图像,可以采用<> INTER_AREA。

## Resize
resized = cv.resize(img(500,500),interpolation=cv.INTER_LINEAR)
cv.imshow("resized",resized)
cv.waitKey(0)

图像翻转

使用OpenCV中的cv.flip()函数,该函数支持图像的翻转(垂直翻转、水平翻转,以及同时翻转均可)。

cv.flip(img,flipcode)翻转模式有三种:0为垂直翻转,1为水平翻转,-1 为两个方向同时翻转。

## Flipping
flipped = cv.flip(img,0)
cv.imshow("Flipped",flipped)
cv.waitKey(0)

图像裁剪

运用Cropped = image[a1:a2,b1:b2] 裁剪图像img得到一个矩形,高度从a1到a2,宽度从b1到b2。

## Cropping
cropped = img[100:200,100:200]
cv.imshow("Cropped",cropped)
cv.waitKey(0)

除此之外,OpenCV还能用于空间颜色转换、物体跟踪、图像分割、轮廓提取、结构分析、人脸识别等,功能十分强大。

Raoof Naushad不仅发布了这篇教程,还分享了用于基本和高级图像处理的OpenCV速查表,感兴趣的朋友可以通过下方链接查看。

原文链接:
https://medium.com/analytics-vidhya/image-transformations-opencv-2021-de3ca97373ed

Raoof Naushad的GitHub主页:
https://github.com/raoofnaushad

本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。

加入AI社群,拓展你的AI行业人脉

量子位「AI社群」招募中!欢迎AI从业者、关注AI行业的小伙伴们扫码加入,与50000+名好友共同关注人工智能行业发展&技术进展

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见~

OpenCV新手入门,如何用它平移缩放和旋转图片相关推荐

  1. 20P81 pr预设模板1400种平移缩放扭曲旋转图形炫光干扰损坏抖动无缝视频转场预设

    20P81 pr预设模板1400种平移缩放扭曲旋转图形炫光干扰损坏抖动无缝视频转场预设 模版信息: 适用软件:Premiere Pro CC 2015 或更高版本 分辨率:1920×1080,1080 ...

  2. 收藏 | OpenCV新手入门预处理

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:量子位 AI博士笔记系列推荐 周志华<机器学习> ...

  3. MACD是什么意思?炒股票新手入门如何用MACD金叉选股指标公式应对A股市场

    而今沪深股市时不时就会震荡一下,小池就给而今沪深股市时不时就会面对震荡一下的炒股票新手入门介绍一下应对A股市场的秘密武器 - MACD金叉选股公式. 首先来讲一下炒股票新手入门是必备常识有哪些: 首先 ...

  4. ExtJs6.5.2新手入门——如何用sencha cmd创建自己的第一个项目

    博主自己也是一个刚开始学习ext的小白,学习新知识一定要记录下来,直接复制自己原来写的培训手册里的,希望能帮到刚接触ExtJs的你!--[作者:伊利蛋白钙yL  原文链接:http://www.cnb ...

  5. 矩阵的平移缩放和旋转

    在unity中,一个平移矩阵是一个单位矩阵与平移参数构成的一个矩阵 把物体的位置转换为矩阵后可得知矩阵中的值与物体位置的关系. 物体设置的位置参数 物体输出的矩阵值 通过图可得知矩阵值的关系和物体位置 ...

  6. Python+Opencv图像处理新手入门教程(四):视频内容的读取与导出

    一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(三):阈值与二值化 1.Intro 今天这节我们主要看怎么利用opencv读取并处理视频中的内容. 2.VideoCapture ...

  7. [Python图像处理] 三十六.OpenCV图像几何变换万字详解(平移缩放旋转、镜像仿射透视)

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

  8. Python+Opencv图像处理新手入门教程(三):阈值与二值化

    一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图 1.Intro 今天这节我们主要研究利用阈值处理图像.例如对于输入图像: 如何做一 ...

  9. Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图

    一步一步来吧 上一节:Python+Opencv图像处理新手入门教程(一):介绍,安装与起步 1.什么是图像 对于计算机而言,图像的本质是一个由像素点构成的矩阵. 例如我们用肉眼很容易分辨一辆汽车的后 ...

最新文章

  1. SqlService 数据操作
  2. 机器学习---实战---K-近邻算法--笔记
  3. Plist文件和字典转模型
  4. MariaDB通过命令行的方式导出指定数据库和还原指定数据库
  5. Response.Redirect奇怪现象
  6. 九.jmeter性能测试基础实践(1)
  7. hadoop2.6.2分布式环境搭建
  8. DELL存储SCv3020风扇狂转问题解决
  9. 传google将要退出中国市场
  10. 推荐ietester工具 [ 光影人像 东海陈光剑 的博客 ]
  11. UNDERSTANDING STRAIGHT-THROUGH ESTIMATOR IN TRAINING ACTIVATION QUANTIZED NEURAL NETS
  12. 【商业信息】PNP ID注册名单 2019-05-21
  13. 六、常用的sql语句
  14. ES6入门--let的基本使用
  15. python import变灰_python--pycharm中import导入包呈现灰色问题之解决~很实用
  16. 办公室必备-上班偷看小说利器
  17. keil的sct文件_keil .sct分散加载文件及其应用(重点必看)
  18. 如何寻找已注册dll的路径
  19. 用户喜欢什么样的内容?
  20. 机器学习回归(regression)——线性回归(Hung-yi Lee)

热门文章

  1. 在JavaScript中生成随机字符串/字符
  2. Python中的元类是什么?
  3. 如何在win10环境下运行debug
  4. slice(),substring()和substr()的异同
  5. GO随笔-单元测试-基础测试
  6. linux free 命令
  7. .NET MVC-去掉验证
  8. linux的read命令
  9. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序...
  10. java中gson的简单使用