【1】引言

前序已经对图像操作进行了广泛的学习,包括读取、放大缩小,改变BGR通道值等,相关链接包括且不限于:

python学opencv|读取图像-CSDN博客

python学opencv|读取图像(三)放大和缩小图像_python(1)使用opencv读取并显示图像;(2)使用opencv对图像进行缩放;(3)使用o-CSDN博客

python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分-CSDN博客

在此基础上,我们开始学习如何平移图像。

【2】官网教程

要想图像实现平移,需要调用cv2.warpAffine()函数。点击下述链接,直达该函数的官网说明:

OpenCV: Geometric Image Transformations

在官网,我们会看到:

图1

这里的几个参数意义为:

void cv::warpAffine     (     InputArray     src, #原始输入图像
        OutputArray     dst, #输出图像
        InputArray     M, #一个2X3矩阵
        Size     dsize, #输出图像大小
        int     flags = INTER_LINEAR, #图像转换插值方式,是可选参数,保持默认即可,不是此次重点
        int     borderMode = BORDER_CONSTANT, #边界类型,是可选参数,保持默认即可,不是此次重点
        const Scalar &     borderValue = Scalar() ) #边界值,是可选参数,保持默认即可,不是此次重点

【3】平移原理

要想实现图像平移,需要对M矩阵进行操作。

此时的M矩阵有两个可选变量x和y:

M=[[1,0,x],[0,1,y]],当x>0,图像向右移动x大小的位置;当y>0,图像向右下移动y大小的位置;当x和y取负值时图像分别向左和向上运动。

【4】代码测试

使用的的原始图像src.png为:

图2

先引入模块,把图片读取进来:

import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块

# 读取图片
src = cv.imread('src.png')
rows=len(src) #读取图像行数
cols=len(src[0]) #读取图像列数

然后制定约束平移方向和大小的M矩阵:

M=np.float32([[1,0,50],
              [0,1,200]]) #M矩阵,x=50,y=200

然后把M矩阵代入cv2.warpAffine()函数,输出图像:

dst=cv.warpAffine(src,M,(cols,rows)) #输出图像
cv.imshow('src-pingyi', dst)  # 在屏幕展示绘制圆形的效果
cv.imwrite('src-pingyi.png', dst)  # 保存图像
cv.waitKey()  # 图像不会自动关闭
cv.destroyAllWindows()  # 释放所有窗口

此时获得的图像为:

图3

由图3可见,图像在x和y方向上进行了不同程度的平移。

【5】总结

掌握了python+opencv实现图像平移的操作技巧。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐