在tesseract-ocr中会用到leptonica库。这里对leptonica简介下。

Leptonica是一个开源的图像处理和图像分析库,它的license是BSD 2-clause。它主要包括的操作有:位图操作、仿射变换、形态学操作、连通区域填充、图像变换及像素掩模、融合、增强、算术运算等操作。

在使用Leptonica的时候,它依赖于开源的zlib、libjpeg、libpng、libtiff、giflib。

zlib是一个非常好的压缩、解压缩库。

它的license是zlib授权,相似BSD。

libjpeg是一个全然用C语言编写的库,包括了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。它的license相似BSD。

libpng是官方的PNG參考库,它支持差点儿全部的PNG功能,它也是可扩展的。它使用zlib库作为压缩引擎。

它的license是permissive free software license。相似BSD。

libtiff是一个用来读写TIFF文件的开源库,它依赖于libjpeg和zlib。它的license是BSD。

giflib是一个读、写GIF图像的开源库,它的license相似BSD。

以下具体介绍Leptonica的编译步骤:

1.        从http://www.zlib.net/ 下载最新的zlib-1.2.8源代码,新建zlib静态库project,将/zlib-1.2.8文件夹下的.h、.c文件增加到此project中。编译生成zlib静态库;

2.        从http://www.libpng.org/pub/png/libpng.html下载最新的libpng-1.6.16。新建libpng静态库project,将/lpng1616文件夹下的.h、.c文件增加到此project中,将/lpng1616/scripts文件夹下的pnglibconf.h.prebuilt文件复制到/lpng1616文件夹下。并改动文件名称为pnglibconf.h,将此文件也增加到此project中,将pngstruct.h文件里zlib.h改成正确的存放路径,编译生成libpng静态库。

3.        从http://www.ijg.org/files/ 下载最新的jpeg-9a源代码,新建ligjpeg静态库project,将/jpeg-9a文件夹下的.h、.c文件增加到此project中(jmemdos.c和jmemmac.c文件除外),将jconfig.vc重命名为jconfig.h,将此文件也增加到此project中,编译生成libjpeg静态库。

4.        从ftp://ftp.remotesensing.org/pub/libtiff下载稳定版的tiff-4.0.3源代码,新建libtiff静态库project,将/tiff-4.0.3/libtiff文件夹下对应的.h、.c文件增加到此project中,将tiff_config.vc.h、tiffconf.vc.h分别重命名为tiff_config.h、tiffconf.h,将此两个文件也增加到此project中,编译生成libtiff静态库;

5.        从http://sourceforge.net/projects/giflib/下载最新的gitlib-5.1.1源代码,新建giflib静态库project。将/giflib-5.1.1文件夹下对应的.h、.c文件增加到此project中,对源文件进行调整。将源文件里用到#include <stdbool.h>的地方,用以下语句替换。

//#include <stdbool.h>
#ifndef __cplusplus
typedef int bool;
#define false 0
#define true 1
#endif

将文件里用到的#include<unistd.h>的地方均凝视掉。编译生成giflib静态库;

6.        从http://www.leptonica.org/download.html下载最新的leptonica-1.71源代码,新建liblept静态库project,将/leptonica-1.71/src文件夹下对应的.h、.c文件增加到此project中。调整:(1)、将zlib、libtiff、libpng、gif_lib.h、jpeglib.h相关头文件通过project配置(C/C++-->Additional Include Directories)增加到此project;(2)、将environ.h文件里的#defineHAVE_LIBGIF 0改为#define HAVA_LIBGIF 1 使其支持Gif图像格式。(3)、有些文件会出现奇怪的C2275和C2146错误。解决方法,找到出错处,将全部变量的声明放在函数的开头就可以。(4)、有些文件会出现奇怪的C2057错误,解决方法,凝视掉相似的static const l_int32 L_BUF_SIZE = 52;新建一个redefineconstant.h文件,将此文件包括到出现此问题的文件里。redefineconstant.h文件的内容为:

#ifndef _REDEFINE_CONSTANT_H
#define _REDEFINE_CONSTANT_H #include "allheaders.h" #define L_BUF_SIZE 512
#define MAX_ALLOWED_DILATION 25 #endif // _REDEFINE_CONSTANT_H

7. 新建liblepttest控制台project。对liblept库进行简单測试,相关文件代码例如以下:

stdafx.h:

#pragma once

#include "targetver.h"

#include <stdio.h>

#include "../../../ImgCore/src/zlib/zlib-1.2.8/zlib.h"
#include "../../../ImgCore/src/libpng/lpng1616/png.h"
#include "../../../ImgCore/src/libjpeg/jpeg-9a/jpeglib.h"
#include "../../../ImgCore/src/libtiff/tiff-4.0.3/libtiff/tiff.h"
#include "../../../ImgCore/src/giflib/giflib-5.1.1/lib/gif_lib.h"
#include "../../src/leptonica-1.71/src/allheaders.h"

stdafx.cpp:

#include "stdafx.h"

// TODO: reference any additional headers you need in STDAFX.H
// and not in this file #ifdef _DEBUG
#pragma comment(lib, "../../../../ImgCore/lib/dbg/x86_vc10/zlib[dbg_x86_vc10].lib")
#pragma comment(lib, "../../../../ImgCore/lib/dbg/x86_vc10/libpng[dbg_x86_vc10].lib")
#pragma comment(lib, "../../../../ImgCore/lib/dbg/x86_vc10/libjpeg[dbg_x86_vc10].lib")
#pragma comment(lib, "../../../../ImgCore/lib/dbg/x86_vc10/libtiff[dbg_x86_vc10].lib")
#pragma comment(lib, "../../../../ImgCore/lib/dbg/x86_vc10/giflib[dbg_x86_vc10].lib")
#pragma comment(lib, "../../../lib/dbg/x86_vc10/liblept[dbg_x86_vc10].lib")
#else
#pragma comment(lib, "../../../../ImgCore/lib/rel/x86_vc10/zlib[rel_x86_vc10].lib")
#pragma comment(lib, "../../../../ImgCore/lib/rel/x86_vc10/libpng[rel_x86_vc10].lib")
#pragma comment(lib, "../../../../ImgCore/lib/rel/x86_vc10/libjpeg[rel_x86_vc10].lib")
#pragma comment(lib, "../../../../ImgCore/lib/rel/x86_vc10/libtiff[rel_x86_vc10].lib")
#pragma comment(lib, "../../../../ImgCore/lib/rel/x86_vc10/giflib[rel_x86_vc10].lib")
#pragma comment(lib, "../../../lib/rel/x86_vc10/liblept[rel_x86_vc10].lib")
#endif

liblepttest.cpp:

#include "stdafx.h"
#include <iostream>
#include <string> using namespace std; static const l_float32 ANGLE1 = 3.14159265 / 12.; void RotateTest()
{
string strSrc = "../../../testdata/weasel.png";
string strDst = "../../../testdata/dst.gif"; PIX* pixs = pixRead(strSrc.c_str());
if (pixs == NULL) {
cout<<" read image error "<<endl;
return;
} l_int32 w, h, d;
pixGetDimensions(pixs, &w, &h, &d);
PIX* pixd = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_WHITE, w, h);
pixWrite(strDst.c_str(), pixd, IFF_GIF); pixDestroy(&pixs);
pixDestroy(&pixd);
} void EdgeTest()
{
string strSrc = "../../../testdata/marge.jpg";
string strDst = "../../../testdata/dst.bmp"; PIX* pixs = pixRead(strSrc.c_str());
if (pixs == NULL) {
cout<<" read image error "<<endl;
return;
} l_int32 w, h, d;
pixGetDimensions(pixs, &w, &h, &d);
if (d != 8) {
cout<<"pixs not 8 bpp"<<endl;
return;
} PIX* pixf = pixSobelEdgeFilter(pixs, L_HORIZONTAL_EDGES);
PIX* pixd = pixThresholdToBinary(pixf, 10);
pixInvert(pixd, pixd);
pixWrite(strDst.c_str(), pixd, IFF_BMP); pixDestroy(&pixs);
pixDestroy(&pixf);
pixDestroy(&pixd);
} int main(int argc, char* argv[])
{
RotateTest();
EdgeTest(); cout<<"ok!"<<endl; return 0;
}

GitHubhttps://github.com/fengbingchun/Liblept_Test

Leptonica在VS2010中的编译及简单使用举例的更多相关文章

  1. 二维码Data Matrix简单介绍及在VS2010中的编译

    Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明.Data-Matrix二维条码 ...

  2. qt5的.ui文件在VS2010中无法编译问题

    自己手动添加的.ui文件在VS中是无法右键编译的,也即是说,在用QT designer编辑过的.ui文件无法实时更新相应的ui_XX.h文件,造成调试结果无法显示编辑过的新界面. 解决办法: 右键.u ...

  3. VS2010中xercesc配置及简单示例

    从官网下载xerces-c-3.1.1并解压,打开工程项目 xerces-c-3.1.1\projects\Win32\VC10\xerces-all\xerces-all.sln, 选择Xerces ...

  4. JAVA中动态编译的简单使用

    一.引用库 pom文件中申明如下: <dependencies> <!-- https://mvnrepository.com/artifact/junit/junit --> ...

  5. CxImage的编译及简单使用举例

    1.  从http://sourceforge.net/projects/cximage/下载最新的CxImage 702源代码. 2.  解压缩后,以管理员身份打开CxImageFull_vc10. ...

  6. VS2010 MFC中 静态编译设置方法

    问题:VS2010 c++编写的程序在别人的机子运行不了,缺少mfc100u.dll xxx100d.dll等 解决方法:1.将这些dll打包,和应用程序一起发布;2.采用MFC静态编译; 静态编译: ...

  7. VS2010中配置OpenGL

    下面将对VS2010中配置OpenGL进行简单介绍. 学习OpenGL前的准备工作第一步,选择一个编译环境现在Windows系统的主流编译环境有Visual Studio,Broland C++ Bu ...

  8. vs2010中配置OpenGL以及针对64位系统所遇问题的解决办法

    一.下面将对VS2010中配置OpenGL进行简单介绍. 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C+ ...

  9. 关于在vs2010中编译Qt项目时出现“无法解析的外部命令”的错误

    用Cmake讲Qt.VTK和ITK整合后,打开解决方案后添加新类时运行会出现“n个无法解析的外部命令”的错误. 原因是新建的类未能生成moc文件,解决办法是: 1.右键 要生成moc文件的.h文件,打 ...

随机推荐

  1. 16/11/22_plsql

    1.数据类型: char 固定长度,varchar 字符长度按照实际长度, varchar2 字符均存储2个字节, nvarchar 按照Unicode存储.number(m,n)总长度m,小数 n. ...

  2. 一张图来帮你理解 SOA

    SOA 曾经一度是技术领域中最难以理解的一个概念.SOA 似乎让很多人感到困惑 - 一般来讲这是由于人们认为它拥有几乎神奇的力量.事实上 SOA 只是一个很简单的概念:SOA 由诸如 C++ 和 Ja ...

  3. RabbitMQ系列之RabbitMQ单机安装

    安装epel源 rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm #ht ...

  4. day6 SYS模块

        SYS模块 用于提供对Python解释器相关的操作: (1)sys.argv           命令行参数List,第一个元素是程序本身路径 >>> sys.argv [' ...

  5. USACO 6.1 Cow XOR

    Cow XORAdrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All of ...

  6. Python全栈开发之12、html

    从今天开始,本系列的文章会开始讲前端,从htnl,css,js等,关于python基础的知识可以看我前面的博文,至于python web框架的知识会在前端学习完后开始更新. 一.html相关概念 ht ...

  7. nginx中配置文件的讲解

    一: 1.配置文件的结构 nginx由配置文件中指定的指令控制的模块组成. 指令分为简单指令和块指令. 一个简单的指令由空格分隔的名称和参数组成,并以分号(;)结尾. 块指令具有与简单指令相同的结构, ...

  8. 本机ip和127.0.0.1的区别

    简介 连接上因特网的每一台计算机都会有一个IP地址, 在linux下可以使用命令ifconfig来查看本机的ip地址(windows为ipconfig), 比如我当前电脑的ip地址为192.168.0 ...

  9. UIView中常见的方法汇总

    addSubview: 添加一个子视图到接收者并让它在最上面显示出来. - (void)addSubview:(UIView *)view  总结:这个方法同样设置了接收者为下一个视图响应对象.接收者 ...

  10. Python入门1(简介、安装)

    第一次写博客,希望自己能养成每天一篇的好习惯(表示有很大的挑战,就不立Flag了) 先从Python开始吧.下面是本人所学习的主要教材电子版: 链接:http://pan.baidu.com/s/1e ...