opencv学习之几何变换
1.仿射变换
- 缩放
void resize( InputArray src,
OutputArray dst,
Size dsize,
double fx=0,
double fy=0,
int interpolation=INTER_LINEAR)
//如果dsize!=0,那么缩放因子参数fx,fy均为0,并且根据dsize和输入图像的原始尺寸来计算fx和fy
//如果fx和fy位非零值,则dsize=0,那么将根据其他的参数来计算dsize的值。
一个缩放操作可以由其变换矩阵表示为:
S
=
[
S
x
0
0
S
y
]
S=\begin{bmatrix} S_x & 0 \\ 0 & S_y \end{bmatrix}
S=[Sx00Sy]
Sx和Sy分别是x轴和y轴的尺度因子。
示例代码:
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char **argv)
{
//读取源文件
Mat src;
src = imread("../test_size.jpg");
//应用尺度
Mat dst;
resize(src, dst, Size(0, 0), 0.5, 0.5);
//显示结果
imshow("Original image", src);
imshow("Scaled image", dst);
waitKey();
return 0;
}
- 平移
void warpAffine(InputArray src,
OutputArray dst,
InputArray M,//参数M是将src装换为dst的变换矩阵;
Size dsize,
int flags=INTER_LINEAR, //指定内插法
int borderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar())
代码示例:
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char **argv)
{
//读取源文件
Mat src;
src = imread("../test_translation.jpg");
//应用平移
Mat dst;
Mat M = (Mat_<double>(2, 3) << 1, 0, 200, 0, 1, -150);
warpAffine(src, dst, M, src.size());
//显示结果
imshow("original image", src);
imshow("translated image", dst);
waitKey();
return 0;
}
- 旋转