opencv 仿射变换 c++
时间: 2025-02-06 09:13:43 浏览: 44
### OpenCV C++ 实现仿射变换
#### 定义与原理
仿射变换是一种线性映射方法,在保持平行性的前提下改变图形的位置、大小和方向。这种变换通常用于图像处理中的几何校正,如倾斜矫正和平移。
#### 获取仿射变换矩阵
为了执行仿射变换,首先需要获得描述该变换的矩阵。这可以通过指定源图上三个不共线点及其对应的目标位置来完成。`cv::getAffineTransform` 函数接受两组对应的点作为参数并返回相应的转换矩阵[^3]。
```cpp
// 声明两个数组分别存储原图和目标图中三点坐标
Point2f srcTri[3];
Point2f dstTri[3];
srcTri[0] = Point2f( 0, 0 );
srcTri[1] = Point2f( img.cols - 1, 0 );
srcTri[2] = Point2f( 0, img.rows - 1 );
dstTri[0] = Point2f( img.cols*0.0, img.rows*0.33 );
dstTri[1] = Point2f( img.cols*0.85, img.rows*0.25 );
dstTri[2] = Point2f( img.cols*0.15, img.rows*0.7 );
Mat warp_mat = getAffineTransform(srcTri, dstTri);
```
#### 应用仿射变换
一旦有了变换矩阵,就可以利用 `cv::warpAffine()` 函数应用此变换到输入图像上了。这个过程会按照给定的变换规则重新排列像素值,从而达到预期的效果[^2]。
```cpp
Mat warped;
warpAffine(img, warped, warp_mat, Size(warped.cols,warped.rows));
imshow("Warped Image", warped);
waitKey();
```
上述代码片段展示了如何通过定义一对三角形顶点集之间的关系来创建一个自定义的仿射变换,并将其应用于一幅图片之上。
阅读全文
相关推荐















