diff --git a/imgs/5.png b/imgs/5.png new file mode 100644 index 0000000..5a9ea51 Binary files /dev/null and b/imgs/5.png differ diff --git a/src/main/java/base/ImageCorrect.java b/src/main/java/base/ImageCorrect.java new file mode 100644 index 0000000..561981e --- /dev/null +++ b/src/main/java/base/ImageCorrect.java @@ -0,0 +1,89 @@ +package base; + +import org.opencv.core.Mat; +import org.opencv.core.Point; +import org.opencv.core.Scalar; +import org.opencv.imgcodecs.Imgcodecs; +import org.opencv.imgproc.Imgproc; + +import java.io.File; + +/** + * 文字矫正 + */ +public class ImageCorrect extends DllLoad { + + public static void main(String[] args) { + File file = new File("imgs/5.png"); + Mat src = Imgcodecs.imread(file.getAbsolutePath()); + +// { +// Mat gray = new Mat(); +// Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY); +// show(gray); +// +// Mat dst = new Mat(); +// Imgproc.Canny(gray, dst, 10, 100, 3); +// show(dst); +// +// Mat lines = new Mat(); +// // threshold阔值,越高检测精度越高 +// Imgproc.HoughLinesP(dst, lines, 1, Math.PI / 180, 50, 20, 100); +// +// Mat houghLines = new Mat(); +// houghLines.create(dst.rows(), dst.cols(), CvType.CV_8UC1); +// +// +// //Drawing lines on the image +// for (int i = 0; i < lines.cols(); i++) { +// double[] points = lines.get(0, i); +// double x1, y1, x2, y2; +// +// x1 = points[0]; +// y1 = points[1]; +// x2 = points[2]; +// y2 = points[3]; +// +// Point pt1 = new Point(x1, y1); +// Point pt2 = new Point(x2, y2); +// +// //Drawing lines on an image +// Imgproc.line(src, pt1, pt2, new Scalar(255, 0, 0), 1); +// } +// +// show(src); +// } + + { + Mat grayMat = new Mat(); + Mat cannyEdges = new Mat(); + Mat lines = new Mat(); + + Imgproc.cvtColor(src, grayMat, Imgproc.COLOR_RGB2GRAY); + + Imgproc.Canny(grayMat, cannyEdges, 10, 100); + + Imgproc.HoughLinesP(cannyEdges, lines, 1, Math.PI / 180, 50, 20, 20); + + //Drawing lines on the image + for (int i = 0; i < lines.cols(); i++) { + double[] points = lines.get(0, i); + double x1, y1, x2, y2; + + x1 = points[0]; + y1 = points[1]; + x2 = points[2]; + y2 = points[3]; + + Point pt1 = new Point(x1, y1); + Point pt2 = new Point(x2, y2); + + //Drawing lines on an image + Imgproc.line(src, pt1, pt2, new Scalar(255, 0, 0), 1); + } + + show(src); + } + System.exit(0); + } +}