OpenCV warpAffine():实现图像平移(附带实例)
我们知道,图像是由像素组成的,像素的集合相当于一个二维的矩阵,每一个像素都有一个“位置”,也就是每个像素都有一个坐标。
图像平移是将一幅图像中所有的点都按照指定的平移量在水平、垂直方向移动。平移后的图像上的每一点都可以在原图像中找到对应的点。
平移变换分为两种:
有了 OpenCV 后,平移图像就不需要如此麻烦了,因为 OpenCV 提供了函数 warpAffine(),该函数使用指定的矩阵变换原图像,其声明如下:
【实例】实现图像平移。
运行工程,结果如下图所示:
图像平移是将一幅图像中所有的点都按照指定的平移量在水平、垂直方向移动。平移后的图像上的每一点都可以在原图像中找到对应的点。
平移变换分为两种:
- 一种是图像大小不改变,这样原图像中会有一部分不在平移后的图像中;
- 另一种是图像大小改变,这样可以保全原图像的内容。
有了 OpenCV 后,平移图像就不需要如此麻烦了,因为 OpenCV 提供了函数 warpAffine(),该函数使用指定的矩阵变换原图像,其声明如下:
warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) -> dst各个参数的含义如下:
- src 表示输入的图像;
- M 表示 2×3 变换矩阵;
- dsize 表示输出图像的大小;
- dst 表示大小为 dsize 且类型与 src 相同的输出图像;
- flags 表示插值方法的组合;
- borderMode 表示边界模式;
- borderValue 表示在边界为常量的情况下使用的值,默认值为 0。
【实例】实现图像平移。
import numpy as np import cv2 as cv img = cv.imread(r'test.jpg', 1) rows, cols, channels = img.shape M = np.float32([[1,0,100],[0,1,50]]) res = cv.warpAffine(img, M, (cols, rows)) cv.imshow('img', res) cv.waitKey(0) cv.destroyAllWindows()warpAffine() 的第 3 个参数为输出的图像大小,该参数的形式为 (width, height)。
运行工程,结果如下图所示:
