/////////////////////////////////////////////////////////////////////// // File: leptonica_pageseg_interface.cpp // Description: Leptonica-based page segmenter interface. // Author: Thomas Kielbus // Created: Mon Aug 27 10:05:01 PDT 2007 // // (C) Copyright 2007, Google Inc. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // /////////////////////////////////////////////////////////////////////// // Include automatically generated configuration file if running autoconf. #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif #include "leptonica_pageseg_interface.h" #include "leptonica_pageseg.h" #include "imgs.h" #ifdef HAVE_LIBLEPT // Include leptonica library only if autoconf (or makefile etc) tell us to. #include "allheaders.h" #endif #ifdef HAVE_LIBLEPT // ONLY available if you have Leptonica installed. // Use the LeptonicaPageSeg class to perform text block detection. Propagates // the error if any. LeptonicaPageSeg can also return invalid masks; in this // case, return an empty text block mask. bool leptonica_pageseg_get_textblock_mask(IMAGE* page_image, IMAGE* textblock_mask_image) { bool success = true; // Convert the page IMAGE to a PIX PIX* page_pix = page_image->ToPix(); // Compute the textblock mask PIX PIX* textblock_mask_pix = NULL; if (LeptonicaPageSeg::GetTextblockMask(page_pix, &textblock_mask_pix, NULL, NULL, false)) { if (pixGetWidth(textblock_mask_pix) != page_image->get_xsize() || pixGetWidth(textblock_mask_pix) != page_image->get_xsize()) fprintf(stderr, "WARNING: Leptonica's text block mask (%dx%d)" " and the original image (%dx%d) differ in size !\n", pixGetWidth(textblock_mask_pix), pixGetHeight(textblock_mask_pix), page_image->get_xsize(), page_image->get_ysize()); // Create the resulting mask image textblock_mask_image->destroy(); if (pixGetWidth(textblock_mask_pix) <= 0 || pixGetHeight(textblock_mask_pix) <= 0) { // Leptonica failed. Create an empty mask. fprintf(stderr, "WARNING: Leptonica's text block mask is invalid.\n"); textblock_mask_image->create(page_image->get_xsize(), page_image->get_ysize(), 1); } else { // Leptonica succeeded. Convert textblock_mask PIX to an IMAGE textblock_mask_image->FromPix(textblock_mask_pix); } } else { success = false; } pixDestroy(&page_pix); pixDestroy(&textblock_mask_pix); return success; } #endif // HAVE_LIBLEPT