Java 如何通过选择图像中的四个点来笔直图像?

Java 如何通过选择图像中的四个点来笔直图像?,java,image,opencv,image-processing,Java,Image,Opencv,Image Processing,我想通过使用java中opencv的getPerspectiveTransform()方法在图像中选择四个点来笔直图像。我知道可以使用python中的opencv来完成: . 如果有人用它来实现图像校正..请帮助 试试这个: Mat mat=Highgui.imread("inputImage.jpg"); Mat src_mat=new Mat(4,1,CvType.CV_32FC2); Mat dst_mat=new Mat(4,1,CvType.CV_32FC2); // Keypoin

我想通过使用java中opencv的getPerspectiveTransform()方法在图像中选择四个点来笔直图像。我知道可以使用python中的opencv来完成: . 如果有人用它来实现图像校正..请帮助

试试这个:

Mat mat=Highgui.imread("inputImage.jpg");
Mat src_mat=new Mat(4,1,CvType.CV_32FC2);
Mat dst_mat=new Mat(4,1,CvType.CV_32FC2);

// Keypoint location on source image
src_mat.put(0,0,407.0,74.0,1606.0,74.0,420.0,2589.0,1698.0,2589.0);
// Desired keypoint location after straigting
dst_mat.put(0,0,0.0,0.0,1600.0,0.0, 0.0,2500.0,1600.0,2500.0);
Mat perspectiveTransform=Imgproc.getPerspectiveTransform(src_mat, dst_mat);

Mat dst=mat.clone();

Imgproc.warpPerspective(mat, dst, perspectiveTransform, new Size(1600,2500));
Highgui.imwrite("resultImage.jpg", dst);
原始线程:

透视变换可用于实现四元到四元的转换。在OpenCV中,主要有两种方法来实现getPerspectiveTransformation()和warpPerspective()方法

以下是实现图像校正的示例代码:

首先在源图像中获取四个四边形点

Mat srcImage = Imgcodecs.imread("input.png");
Mat destImage = new Mat(500, 700, srcImage.type());
Mat src = new MatOfPoint2f(new Point(x1, y1), new Point(x2, y2), new Point(x3, y3), new Point(x4, y4));
Mat dst = new MatOfPoint2f(new Point(0, 0), new Point(destImage.width() - 1, 0), new Point(destImage.width() - 1, destImage.height() - 1), new Point(0, destImage.height() - 1));
获取转换矩阵

Mat transform = Imgproc.getPerspectiveTransform(src, dst);
Imgproc.warpPerspective(srcImage, destImage, transform, destImage.size());
你会得到一个变直的图像

我已经在此图像上测试了此代码。

生成的图像是

看一看