opencv仿射变换和逆变换的c++示例代码
时间: 2024-10-06 22:03:01 浏览: 51
基于opencv的仿射变换
4星 · 用户满意度95%
OpenCV库提供了丰富的图像处理功能,包括仿射变换和它的逆变换。在C++中,你可以使用`cv::warpAffine`函数进行仿射变换,`cv::getAffineTransform`用于获取变换矩阵,而逆变换则通过反向应用相同的矩阵完成。
以下是基本的C++代码示例:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
// 定义源点和目标点
Point2f src[4] = {Point2f(0, 0), Point2f(0, img_height), // 左上角、右上角
Point2f(img_width, img_height), Point2f(img_width, 0)}; // 右下角、左下角
Point2f dst[4] = {Point2f(dst_x1, dst_y1), Point2f(dst_x2, dst_y2),
Point2f(dst_x3, dst_y3), Point2f(dst_x4, dst_y4)};
// 计算仿射变换矩阵
Mat M = getAffineTransform(src, dst);
// 原始图片
Mat src_img("input.jpg", IMREAD_GRAYSCALE);
if (src_img.empty())
std::cout << "Error reading image!" << std::endl;
// 应用仿射变换
Mat transformed_img;
warpAffine(src_img, transformed_img, M, src_img.size());
// 如果需要逆变换,只需交换源点和目标点的位置,然后再次运行上述代码即可
// 显示原图和变换后的图
imshow("Original Image", src_img);
imshow("Transformed Image", transformed_img);
waitKey(0);
```
在这个例子中,`img_height`和`img_width`是你原始图片的尺寸,`dst_x1`, `dst_y1`, ..., `dst_x4`, `dst_y4`是你想要变形到的新位置。注意,`getAffineTransform`创建的是从源到目标的变换,逆变换则是从目标返回到源。
阅读全文