2008-11-07 10 views

ответ

4

ImageMagick может это сделать; вы можете использовать ImageMagick Java bindings. Оператор auto-crop - это, вероятно, то, что вы ищете. Автоматическая обратная связь представляет собой гораздо более сложную задачу и включает в себя некоторую значительную обработку изображений; Я не уверен, сможет ли ImageMagick справиться с этим. Если вы можете определить параметры перекоса, используя что-то еще, ImageMagick может определенно развязать его для вас.

1

Я бы предположил, что кто-то создал библиотеку поверх Java Advanced Imaging API для этого. Вы можете попробовать Googling для «Java Advanced Imaging deskew».

+0

по состоянию на 2012 год, эта страница теперь топ хит для этого поиска на Google. – 2012-06-04 20:55:52

+0

@IanMcLaird Хи хи. Это замечательно круговое. Вы когда-нибудь пробовали искать «рекурсию» в Google? – 2012-06-05 13:51:51

1

Выравнивание

Посмотрите на Tess4j (Java JNA wrapper for Tesseract).

Вы можете комбинировать ImageDeskew.getSkewAngle() с ImageHelper.rotate(BufferedImage image, double angle).

Существует пример того, как использовать его на тестовой папке проекта tess4j Tesseract1Test.java

public void testDoOCR_SkewedImage() throws Exception { 
    logger.info("doOCR on a skewed PNG image"); 
    File imageFile = new File(this.testResourcesDataPath, "eurotext_deskew.png"); 
    BufferedImage bi = ImageIO.read(imageFile); 
    ImageDeskew id = new ImageDeskew(bi); 
    double imageSkewAngle = id.getSkewAngle(); // determine skew angle 
    if ((imageSkewAngle > MINIMUM_DESKEW_THRESHOLD || imageSkewAngle < -(MINIMUM_DESKEW_THRESHOLD))) { 
     bi = ImageHelper.rotateImage(bi, -imageSkewAngle); // deskew image 
    } 

    String expResult = "The (quick) [brown] {fox} jumps!\nOver the $43,456.78 <lazy> #90 dog"; 
    String result = instance.doOCR(bi); 
    logger.info(result); 
    assertEquals(expResult, result.substring(0, expResult.length())); 
} 

eurotext_deskew.png