leptonica在vs2010中的编译及简单使用举例(代码片段)

xkiwnchwhd xkiwnchwhd     2022-11-28     402

关键词:

在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静态库工程,将/zlib-1.2.8目录下的.h、.c文件加入到此工程中,编译生成zlib静态库;

2.        从http://www.libpng.org/pub/png/libpng.html下载最新的libpng-1.6.16,新建libpng静态库工程,将/lpng1616目录下的.h、.c文件加入到此工程中,将/lpng1616/scripts目录下的pnglibconf.h.prebuilt文件拷贝到/lpng1616目录下,并修改文件名为pnglibconf.h,将此文件也加入到此工程中,将pngstruct.h文件中zlib.h改成正确的存放路径,编译生成libpng静态库;

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

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

5.        从http://sourceforge.net/projects/giflib/下载最新的gitlib-5.1.1源码,新建giflib静态库工程,将/giflib-5.1.1目录下相应的.h、.c文件加入到此工程中,对源文件进行调整,将源文件中用到#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静态库工程,将/leptonica-1.71/src目录下相应的.h、.c文件加入到此工程中,调整:(1)、将zlib、libtiff、libpng、gif_lib.h、jpeglib.h相关头文件通过工程配置(C/C++-->Additional Include Directories)加入到此工程;(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控制台工程,对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


 

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

visualstudio2013编译tesseract3.04(代码片段)

...结。编译新版本最大问题在于新版本的Tesseract依赖新版的Leptonica库,后者是一个开源的C语言图像处理包。新版本的Leptonica需要新版的zlib,libpng,libtiff,libjepg和giflib这些库。在Leptonica的官网上只给出了Leptonica1.68版本的VS2008编译工程... 查看详情

vc6.0编译dll,使用vs2010调用问题及解决方法

1、做驱动的时候。做应用程序须要和驱动通信,必须建立一个DLL。2、由于客户使用版本号太低,须要使用到VC6.0编写DLL3、在VC6.0上编写DLL的时候,导出的函数名会出现和原函数名不正确,导致调用失败4、解决的方法。  &... 查看详情

tesseract-ocr编译及viewerdebugging使用(代码片段)

...,获取的过程。一、简介    Tesseract-OCR依赖图像库Leptonica。Leptonica是一个开源的图像处理和图像分析库。它主要包括的操作有:位图操作、仿射变换、形态学操作、连通区域填充、图像变换及像素掩模 查看详情

windows764位机上cuda70配置及在vs2010中的简单使用举例

1.        查看本机配置,查看显卡类型是否支持NVIDIAGPU,选中计算机-->右键属性-->设备管理器-->显示适配器:NVIDIAGeForceGT610,从https://developer.nvidia.com/cuda-gpus可以查到相应显卡的computecapability;... 查看详情

确定啥时候在VS2010中使用VC90编译器而不是VS2008?

】确定啥时候在VS2010中使用VC90编译器而不是VS2008?【英文标题】:DeterminewhenusingtheVC90compilerinVS2010insteadofVS2008?确定什么时候在VS2010中使用VC90编译器而不是VS2008?【发布时间】:2010-06-1420:07:17【问题描述】:是否有一个(Microsoft... 查看详情

fluent中的udf能用vs2010编译吗?

我的电脑用的是刚安装的WIN7,下了vs2010程序,用vs编译了UDF代码后,在fluent导入过程中,出现"'nmake'不是内部或外部命令,也不是可运行的程序或批处理文件。"想请教各位高手这是个什么问题,该怎么解决.恩,谢谢了,我... 查看详情

我无法在 vista 上使用 VS2010 编译 opencv 示例

】我无法在vista上使用VS2010编译opencv示例【英文标题】:Ican\'tcompileopencvsampleswithVS2010onvista【发布时间】:2011-05-1623:33:12【问题描述】:我在windowsvista上使用VisualStudio2010。我想编译一个由liuliu创建的名为“find_obj.cpp”的OPENCV示例... 查看详情

tesseract-ocr编译及viewerdebugging使用(代码片段)

...,获取的过程。一、简介    Tesseract-OCR依赖图像库Leptonica。Leptonica是一个开源的图像处理和图像分析库。它主要包括的操作有:位图操作、仿射变换、形态学操作、连通区域填充、图像变换及像素掩模、融合、增强、... 查看详情

vs2015编译使用boost库遇到的问题及正确编译使用教程

...前言2、问题发现3、排查找原因二、VS2015+Boost1.69.0正确编译使用1、执行bat文件2、运行exe文件,编译lib库3、VS2015包含库使用背景:        本机电脑window10上已经安装过VS2010、VS2022后,由于之前想要 查看详情

vs2010编译curl为static库及测试

1,编译curl为static库用vs2010打开:curl-7.32.0vsvc6vc6curl.dsw选择LIBRelease生成libcurl静态库:curl-7.32.0vsvc6liblib-releaselibcurl.lib      2,重新建立一个testcurl控制台程序添加curl头文件:拷贝curl 查看详情

VS2010:以 64 位编译 C++ 项目

】VS2010:以64位编译C++项目【英文标题】:VS2010:CompileaC++Projectin64bit【发布时间】:2012-02-1519:11:47【问题描述】:我想使用VisualStudio2010Express在64bin中编译C++DLL。我知道如何在C#中使用配置管理器。只需选择x64作为目标平台并编译... 查看详情

qt creator qt5.1 vs2010 使用静态库时链接器错误

...题描述】:当我尝试在带有qt5.1的qtcreater中使用使用vs2010编译的静态库时遇到问题。我正在使用qt5.1。这是用/为vs2010编译器编译的。我的简单库的源代码如下:Lib_Test.h 查看详情

如何在windows上编译tesseractocr

...久.其实思考清楚了也就那么回事儿,主要就是由于依赖库:Leptonica在使用Cmake将TesseractOCR编译成vs工程时,由于在CMakeLists.txt中没有指定Leptonica库的路径,所以CMake在将TesseractOCR编译成v 查看详情

在 QtCreator (VS 2010) 中设置 CUDA v7.0

...教程吗?谢谢!遇到的问题和尝试:我在QtCreator中设置和编译一个简单的CUDA程序时遇到了麻烦。我已经阅读了一些 查看详情

vs2010编译多个project问题

    使用VS2010编译从vc6.0复制过来的原project文件源代码。提示错误非常多。感觉无从下手。非常多原始的函数和API參数都提示类型错误或者不兼容。百度一下。第一个问题: vc6.0使用ASIIC字符。而VS2010默认选项... 查看详情

在调试模式下尝试将预编译头文件与 VS2010 (VC100) 一起使用时,如何消除错误 C2859?

】在调试模式下尝试将预编译头文件与VS2010(VC100)一起使用时,如何消除错误C2859?【英文标题】:HowdoIeliminateerrorC2859whentryingtouseaprecompiledheaderwithVS2010(VC100)indebugmode?【发布时间】:2010-07-0106:42:28【问题描述】:我正在尝试升级旧... 查看详情

vs2010和vs2019double转wf_char

...年一直使用VS2010进行开发,使用MFC作为界面框架,使用C++中的容器、算法,使用C线程处理多线程,使用Win32中的临界区、Event、Mutex等处理线程间通信,使用boost中的部分组件(如bind、function、signals2等)等。多年过去,是时候做些... 查看详情

vs2010可以编译fmt吗

】vs2010可以编译fmt吗【英文标题】:Isitpossibletocompilefmtinvs2010【发布时间】:2020-05-0613:50:10【问题描述】:我知道VisualStudio2010已过时,不应使用。我只是好奇是否可以在vs2010中编译libfmt.a?【问题讨论】:你说的是thislibrary吗?th... 查看详情