OpenCV新手入门,如何用它平移缩放和旋转图片
子豪 发自 凹非寺?
量子位 报道 | 公众号 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行业人脉


量子位?QbitAI · 头条号签约作者
?'?' ? 追踪AI技术和产品新动态
一键三连「分享」、「点赞」和「在看」
科技前沿进展日日相见~
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 习近平将发表二〇二六年新年贺词 7904141
- 2 2026年国补政策来了 7808738
- 3 东部战区:开火!开火!全部命中! 7712893
- 4 2026年这些民生政策将惠及百姓 7616985
- 5 小学食堂米线过期2.5小时被罚5万 7519709
- 6 解放军喊话驱离台军 原声曝光 7428214
- 7 为博流量直播踩烈士陵墓?绝不姑息 7327605
- 8 每月最高800元!多地发放养老消费券 7238391
- 9 数字人民币升级 1月1日起将计付利息 7141831
- 10 2026年1月1日起 一批新规将施行 7040675








量子位
