opencv(三):几何变换
空间变换
仿射变换
什么是仿射变换?
对一张图片进行旋转,缩放,平移的变换就叫仿射变换。
仿射变换函数:
Mat getAffineTransform(InputArray src, InputArray dst), 该函数需要已知变换前与变换后的坐标,返回相应的变换矩阵 ,至于是何种变换无需事先知道。适用于目标检测场合,通过检测得到的特征点进行图像匹配。
Mat getRotationMatrix2D(Point2f center, double angle, double scale), 通过已知旋转中心坐标(坐标原点为图像左上端 点)、旋转角度(单位为度°,顺时针为负,逆时针为正)、放缩比例,来计算并返回旋转/放缩矩阵。与 getAffineTransform相比,无需知道变换后坐标,适用于一般情况下的图像变换。
void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
根据getAffineTransform或getRotationMatrix2D得到的变换矩阵,计算变换后的图像。warpAffine不只可以用来实现 仿射变换,还能用来实现其他的变换。
有关各参数的解释:
src为输入图像
dst为变换后图像,类型与src一致。
M为变换矩阵,需要通过其它函数获得,当然也可以手动输入。
dsize为输出图像的大小
flags,插值算法,详细如下(但是根本就不必看,只要搞清楚为什么需要插值就行了):
当图像放大时,会比原图像多出一些像素,但是你总得给这些像素赋一些值吧,插值算法就是用来解决这些 像素赋值的问题。
下面只粘贴一部分插值算法,详情请百度百科。
enum InterpolationFlags{
/** nearest neighbor interpolation */
INTER_NEAREST = 0, //最近邻插值
/** bilinear interpolation */
INTER_LINEAR = 1, //双线性插值
/** bicubic interpolation */
INTER_CUBIC = 2, //双三次插值
.........
opencv实现图像旋转(其它变换的流程与仿射变换相似,就不介绍了)
若有错误,请指出,谢谢。
参考自:
https://www.geek-share.com/detail/2549360961.html
https://www.geek-share.com/detail/2698731841.html
- OpenCV 几何变换-图像镜像
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- opencv教程(基于python)----几何变换
- Python下opencv使用笔记(三)(图像的几何变换)
- Python下opencv图像的几何变换
- opencv之图像几何变换和放大
- openCV—Python(5)—— 图像几何变换
- OpenCV-Python-(2)-几何变换
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- OpenCV 几何变换-图像平移
- python opencv入门 几何变换(11)
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)
- opencv-python(8):几何变换
- OpenCV自带例子 (十) 图像几何变换
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 【OpenCV】图像几何变换:旋转,缩放,斜切