写一段C++opencv代码实现图像倾斜校正
时间: 2023-11-04 11:00:16 浏览: 121
C# OpenCV图片倾斜校正Dome
好的,以下是一段简单的C++代码使用OpenCV实现图像倾斜校正:
```
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取待校正的图像
Mat srcImage = imread("input.jpg", IMREAD_GRAYSCALE);
// 进行边缘检测,使用Canny算法
Mat edges;
Canny(srcImage, edges, 50, 150, 3);
// 寻找轮廓
std::vector<std::vector<Point> > contours;
findContours(edges, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 对轮廓进行多边形拟合,得到矩形框
std::vector<Point> points;
for (int i = 0; i < contours.size(); ++i) {
for (int j = 0; j < contours[i].size(); ++j) {
points.push_back(contours[i][j]);
}
}
RotatedRect rect = minAreaRect(points);
// 计算旋转角度,并旋转图像
double angle = rect.angle;
if (angle < -45.) {
angle += 90.;
}
Mat M = getRotationMatrix2D(rect.center, angle, 1.0);
Mat rotated;
warpAffine(srcImage, rotated, M, srcImage.size(), INTER_CUBIC);
// 显示校正后的图像
imshow("result", rotated);
waitKey(0);
return 0;
}
```
这段代码使用Canny边缘检测算法寻找图像轮廓,然后对轮廓进行多边形拟合,得到矩形框。接着计算矩形框的旋转角度,并使用OpenCV的warpAffine函数对图像进行旋转,最后显示校正后的图像。
阅读全文