OpenCV仿射变换实战:图像平移原理与cv2.warpAffine详解

不晚
不晚
发布时间:2026-10-13| 5人浏览过
原创

本文详解OpenCV中图像平移的几何原理,通过二维坐标变换推导三维仿射矩阵的构造方法。重点解析cv2.warpAffine函数的参数配置,包括变换矩阵M、输出尺寸dsize及插值方式flags,结合Python代码示例演示如何实现图像平移及边界填充处理。

图像平移的实际需求与几何原理

在常见的图像编辑软件中,平移、缩放和旋转是最基础的操作功能。以手机摄影为例,由于设备位置传感器故障或软件Bug,有时会导致拍摄的照片方向异常(如竖拍照片无法正确竖立),此时只能通过软件编辑进行旋转校正。由此可见,几何变换功能在实际生活场景中具有不可或缺的重要性。

为了深入理解这一几何概念,我们可以回顾初中数学中的相关知识点。

平移的基本性质表明,若物体沿x轴方向移动100个单位,其坐标变化即为x+100。因此,平移的通用公式可表示为(x1, y1) = (x+a, y+b),具体示意如图所示。

从线性方程组的角度看,这是一个二元关系。将其转换为矩阵表示形式后,可以发现其运算方式如下所示。

此处采用三维矩阵进行表示,主要目的是将平移、旋转和缩放三种变换统一为一种表示方式,这体现了升维思想的应用。虽然矩阵第三行在平移操作中看似无直接作用,但通过构造特定的变换矩阵并执行计算,即可实现坐标变换。平移的具体距离由tx和ty决定。为了保持统一性,旋转、缩放和平移均可使用同一公式进行表示和计算,这也是引入三维数组的优势所在。同理,三维空间中的变换则采用四维变换矩阵。下文将通过具体示例演示图像平移的操作过程。

OpenCV图像平移代码实现


#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
 
#图片的路径
imgname = "img1.jpg"
 
#读取图片
image = cv2.imread(imgname, cv2.IMREAD_COLOR)
 
#图片的高度和宽度
h,w = image.shape[:2]
 
#构造平移的2X3的矩阵,然后调用warpAffine执行平移
A1 = np.array([[1, 0, 50], [0, 1, 40]], np.float32)
d1 = cv2.warpAffine(image, A1, (w, h), borderValue = 125)
 
#显示平移之后的图片
cv2.imshow("d1",d1)
 
#显示图像
cv2.imshow("image", image)
 
#等待用户输入,然后删除所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

程序执行后的结果如下所示。

左侧图片展示了平移后的效果,左上角出现了一片空白区域,该区域使用了固定颜色进行填充;右侧图片为原始图像。

cv2.warpAffine函数参数详解

本例主要使用了cv2.warpAffine函数,该函数的定义如下所示。

cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst

函数各参数含义如下:

src:输入图像。

M:变换矩阵。

dsize:输出图像的尺寸。

flags:插值方法的组合(int类型)。

borderMode:边界像素模式(int类型)。

borderValue:边界填充值,默认为0。

在上述参数中,M作为仿射变换矩阵,通常反映平移或旋转关系,类型为InputArray的2×3变换矩阵。

flags表示插值方式,默认为flags=cv2.INTER_LINEAR(线性插值)。其他可选值包括:cv2.INTER_NEAREST(最近邻插值)、cv2.INTER_AREA(区域插值)、cv2.INTER_CUBIC(三次样条插值)以及cv2.INTER_LANCZOS4(Lanczos插值)。

至此,我们掌握了OpenCV中仿射变换的平移功能用法。

总结

以上内容介绍了使用OpenCV实现仿射变换中的平移功能,希望能对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持! 如果您觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。