У меня есть следующий код для коррекции перспективы, но в результате получается изображение, растянутое по маленьким координатам X и сжатое по большим, как это видно на следующих изображениях.
Исходное изображение, обозначающее конверсию ->
У меня есть следующий код для коррекции перспективы, но в результате получается изображение, растянутое по маленьким координатам X и сжатое по большим, как это видно на следующих изображениях. Исходное изображение, обозначающее конверсию -> [img]https://i.sstatic.net/bZt62OBU.png[/img]
Выходное изображение -> [img]https://i.sstatic.net/rUweOyIk.png[/img]
/** * Transforms an image using four points, adjusting the size of the output image * to be as large as possible based on the points and the aspect ratio. * * @param fileIn Path to the input image. * @param points Four points in the original image defined in the following * order: - (x1, y1): top-left - (x2, y2): top-right - (x3, * y3): bottom-right - (x4, y4): bottom-left * @param fileOut Path where the transformed image will be saved. * @param aspectRatio Width/height ratio of the output image. top-right double width2 = dinstance(points[3], points[2]); // bottom-left -> bottom-right double widthDest = (width1 + width2) / 2.0;
// Adjust dimensions according to aspect ratio if (widthDest / heightDest > aspectRatio) { heightDest = widthDest / aspectRatio; } else { widthDest = heightDest * aspectRatio; } }
// Final dimensions of the output image int finalWidth = (int) Math.round(widthDest); int finalHeight = (int) Math.round(heightDest);
log("Original size: " + imageOrig.width() + "x" + imageOrig.height()); log("Final size : " + finalWidth + "x" + finalHeight);
// Define the destination points MatOfPoint2f pointsDest = new MatOfPoint2f(new Point(0, 0), // top-left new Point(finalWidth - 1, 0), // top-right new Point(finalWidth - 1, finalHeight - 1), // bottom-right new Point(0, finalHeight - 1) // bottom-left );
// Define the original points MatOfPoint2f pointsOrig = new MatOfPoint2f(points);
// Calculate the perspective transformation matrix Mat transformationMat = Imgproc.getPerspectiveTransform(pointsOrig, pointsDest);
// Create the transformed image with white background Mat imageTransformed = new Mat(finalHeight, finalWidth, imageOrig.type(), new Scalar(255, 255, 255));
// Apply transformation Imgproc.warpPerspective(imageOrig, imageTransformed, transformationMat, new Size(finalWidth, finalHeight), Imgproc.INTER_LINEAR, Core.BORDER_CONSTANT, new Scalar(255, 255, 255));
// Save final image boolean guardado = Imgcodecs.imwrite(fileOut, imageTransformed); if (guardado) { log("Image saved to " + fileOut); } else { log("Error saving image " + fileOut); } }
У меня есть следующий код для коррекции перспективы, но в результате получается изображение, растянутое по маленьким координатам X и сжатое по большим, как это видно на следующих изображениях.
Исходное изображение, обозначающее преобразование ->...
У меня есть следующий код для коррекции перспективы, но в результате получается изображение, растянутое по маленьким координатам X и сжатое по большим, как это видно на следующих изображениях.
Если бы преобразование было правильным, вертикальная...
У меня есть следующий код для коррекции перспективы, но в результате получается изображение, растянутое по маленьким координатам X и сжатое по большим, как это видно на следующих изображениях.
Если бы преобразование было правильным, вертикальная...