opencv加速warpAffineC++例程
时间: 2023-06-28 12:09:06 浏览: 101
下面是一个使用OpenCV加速warpAffine的C++例程:
```cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("input.jpg");
if (src.empty())
{
cout << "Failed to read image!" << endl;
return -1;
}
float angle = 30.0;
float scale = 0.8;
// 计算旋转中心
Point2f center(src.cols / 2.0, src.rows / 2.0);
// 构造旋转矩阵
Mat M = getRotationMatrix2D(center, angle, scale);
// 开始计时
double t1 = (double)getTickCount();
// 使用OpenCV加速的warpAffine函数进行仿射变换
Mat dst;
warpAffine(src, dst, M, src.size(), INTER_LINEAR, BORDER_CONSTANT);
// 结束计时
double t2 = ((double)getTickCount() - t1) / getTickFrequency();
cout << "Time consumed: " << t2 << " s" << endl;
imshow("input", src);
imshow("output", dst);
waitKey();
return 0;
}
```
在上面的例程中,我们首先读取了一张输入图像,然后定义了旋转角度和缩放比例。接着,我们通过调用getRotationMatrix2D函数构造了一个旋转矩阵。最后,我们使用warpAffine函数进行了仿射变换,并输出了变换后的图像和消耗的时间。
值得注意的是,我们在调用warpAffine函数时,指定了INTER_LINEAR和BORDER_CONSTANT参数。其中,INTER_LINEAR表示我们使用双线性插值算法对图像进行重采样,BORDER_CONSTANT表示我们对图像边界进行了常数填充,具体来说就是将图像边缘的像素值设置为0。
由于OpenCV内置的warpAffine函数已经进行了优化,因此我们可以很轻松地实现图像仿射变换的加速。
阅读全文