opencv 图片矫正java代码示例
时间: 2023-06-30 11:24:40 浏览: 62
以下是使用OpenCV进行图片矫正的Java代码示例:
```java
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class ImageCorrection {
public static void main(String[] args) {
// 加载OpenCV库
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 读取原始图片
Mat src = Imgcodecs.imread("input.jpg");
// 转换为灰度图像
Mat gray = new Mat();
Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
// 检测直线
Mat lines = new Mat();
Imgproc.HoughLinesP(gray, lines, 1, Math.PI / 180, 50, 50, 10);
// 计算旋转角度
double angle = 0;
for (int i = 0; i < lines.rows(); i++) {
double[] line = lines.get(i, 0);
double x1 = line[0];
double y1 = line[1];
double x2 = line[2];
double y2 = line[3];
double theta = Math.atan2(y2 - y1, x2 - x1);
angle += theta;
}
angle /= lines.rows();
angle = angle * 180 / Math.PI;
// 旋转图像
Point center = new Point(src.width() / 2, src.height() / 2);
Mat rot = Imgproc.getRotationMatrix2D(center, angle, 1.0);
Mat dst = new Mat();
Imgproc.warpAffine(src, dst, rot, src.size());
// 保存处理后的图像
Imgcodecs.imwrite("output.jpg", dst);
}
}
```
以上代码实现了通过Hough变换检测图片中的直线,计算旋转角度,并将图片旋转回水平方向。需要注意的是,该方法只适用于图片中包含直线的情况,如果图片中没有直线,则需要使用其他方法进行矫正。
阅读全文