Я пытаюсь повернуть изображение. Приведенный ниже код может успешно повернуть изображение, но оно обрезает углы изображения и вращается в неправильном направлении. В чем может быть проблема? Буду благодарен, если кто-нибудь даст мне совет. Вот код:
public void findAngle(){
FloatBuffer deskew_angle = FloatBuffer.allocate(1);
IntBuffer orientation = IntBuffer.allocate(1);
IntBuffer writing_direction = IntBuffer.allocate(1);
IntBuffer textline_order = IntBuffer.allocate(1);
final TessAPI api = TessAPI.INSTANCE;
final TessBaseAPI handle;
handle = api.TessBaseAPICreate();
api.TessBaseAPIInit3(handle, "C:\\Program Files\\Tesseract-OCR\\tessdata", "eng");
api.TessBaseAPISetVariable(handle, "tessedit_char_whitelist",
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ?!.,:-");
File tiff = new File("C:\\Users\\A\\Desktop\\1.jpg");
BufferedImage image = null;
try {
image = ImageIO.read(new FileInputStream(tiff));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} // require jai-imageio lib to read TIFF
ByteBuffer buf = ImageIOHelper.convertImageData(image);
int bpp = image.getColorModel().getPixelSize();
int bytespp = bpp / 8;
int bytespl = (int) Math.ceil(image.getWidth() * bpp / 8.0);
api.TessBaseAPISetPageSegMode(handle, TessAPI.TessPageSegMode.PSM_AUTO_OSD);
api.TessBaseAPISetImage(handle, buf, image.getWidth(), image.getHeight(), bytespp, bytespl);
TessPageIterator pi = api.TessBaseAPIAnalyseLayout(handle);
api.TessPageIteratorOrientation(pi, orientation, writing_direction, textline_order, deskew_angle);
float angle = deskew_angle.get(0);
System.out.println("Angle : "+angle);
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String resultString = "";
Mat frame = Imgcodecs.imread(lFile, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
Point center = new Point(350,350);
if(angle == 270 || angle == -90) {
Mat rotImage = Imgproc.getRotationMatrix2D(center, angle, 1);
Imgproc.warpAffine(frame, frame, rotImage, new Size(frame.cols(),frame.cols()));
}
else if (angle == 180 || angle == -180 ){
Mat rotImage = Imgproc.getRotationMatrix2D(center, angle, 1);
Imgproc.warpAffine(frame, frame, rotImage, new Size(frame.cols(),frame.cols()));
}
else if(angle == 90 || angle == -270) {
Mat rotImage = Imgproc.getRotationMatrix2D(center, angle, 1);
Imgproc.warpAffine(frame, frame, rotImage, new Size(frame.cols(),frame.cols()));
}
else if(angle == 360 || angle == 0 || angle == -360) {
Mat rotImage = Imgproc.getRotationMatrix2D(center, angle, 0.65);
Imgproc.warpAffine(frame, frame, rotImage, new Size(frame.cols(),frame.cols()));
}
System.out.println(String.format(
"Orientation: %s\nWritingDirection: %s\nTextlineOrder: %s\nDeskew angle: %.4f\n",
Utils.getConstantName(orientation.get(), TessOrientation.class),
Utils.getConstantName(writing_direction.get(), TessWritingDirection.class),
Utils.getConstantName(textline_order.get(), TessTextlineOrder.class),
deskew_angle.get(0)));
api.TessBaseAPIClear(handle);
api.TessBaseAPIEnd(handle);
api.TessBaseAPIDelete(handle);
Imgcodecs.imwrite("C:\\Users\\A\\Desktop\\a.jpg", img);
}
И фон повернутого изображения черный, но я хочу, чтобы он был прозрачным или белым. Ниже приведен код https://stackoverflow.com/a/45559068/9994984 Я пытаюсь все шаги, но не работает правильно. Заранее спасибо.