Tesseract-ORC提取图片中的文字

本文介绍了一个使用C++实现的光学字符识别(OCR)系统,该系统基于Tesseract OCR引擎和OpenCV库,实现了从图像中提取文本的功能,并通过伽马变换等图像处理技术提高识别精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include <QDir>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core/mat.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>


using namespace cv;
using namespace std;
using namespace tesseract;

void  GammaTransform(cv::Mat &image, cv::Mat &dist)
{

    Mat imageGamma;
    //灰度归一化
    image.convertTo(imageGamma, CV_64F, 1.0 / 255, 0);

    //伽马变换
    double gamma = 0.7;

    pow(imageGamma, gamma, dist);//dist 要与imageGamma有相同的数据类型
    dist.convertTo(dist, CV_8U, 255, 0);
    imageGamma.release();
}

PIX* cvtMat2PIX(Mat imgGray)
{
    int cols = imgGray.cols;
    int rows = imgGray.rows;

    PIX *pixS = pixCreate(cols, rows,8);

    for (int i = 0; i < rows; i++)
        for (int j = 0; j < cols; j++)
            pixSetPixel(pixS, j, i, (l_uint32)imgGray.at<uchar>(i, j));
    return pixS;

}
int main(int argc, char *argv[])
{

    QString filePath("/home/nishome/lichao/zhoujun/image/");
    QDir  dir(filePath);
    QFileInfoList fileList;
    QString   jpgFilePath;
    if(dir.exists())
    {
        QFileInfoList subFileList = dir.entryInfoList(QDir::Files|QDir::CaseSensitive);//过滤条件为只限文件并区分大小写
        for (int i = 0;i < subFileList.size(); i++)
        {
            QString suffix = subFileList[i].suffix();//获取后缀名
            if (suffix.compare("jpg") == 0)
            {
                cout << "picture is jpg" <<endl;
                fileList.push_back(subFileList[i]);
            }
        }
    }
    foreach (QFileInfo fileinfo, fileList)
    {

        Mat img1;
        char* output;
        jpgFilePath = fileinfo.absoluteFilePath();
        string filename = jpgFilePath.toStdString();

        TessBaseAPI *api = new TessBaseAPI();
        if(api->Init(NULL,"eng"))
        {
            cout << "tesseract init failed" <<endl;
        }

        img1 = imread(filename,0);
        img1 =img1(Rect(0,57,123,148)).clone();


        GammaTransform(img1,img1);

        //重硬盘获取图片进行识别
//        char path1[256];
//        sprintf(path1, "/home/nishome/lichao/zhoujun/image/new%d.tif", idx);
//        imwrite(path1, img1);
      //  Pix* pix = pix;
//        cout << "path1=" << path1 << endl;

        //重Mat结构图获取数据进行识别
        Pix* pix =cvtMat2PIX(img1);
        api->SetImage(pix);
        output = api->GetUTF8Text();
        cout<<string(output) << endl;
        // Destroy used object and release memory
        api->End();
        delete api;
        delete[] output;
        pixDestroy(&pix);
        img1.release();

   }
    cout << "quit app" << endl;
    return 0;
}

CMakeList文件

CMAKE_MINIMUM_REQUIRED(VERSION 3.8)

PROJECT(TESSERACT)
SET(PROJECT_NAME tesseract)


FIND_PACKAGE (Qt4 REQUIRED)
set (QT_USE_QTNETWORK TRUE)
ADD_DEFINITIONS(-DQT3_SUPPORT_WARNINGS)
ADD_DEFINITIONS(
         /home/nishome/lichao/local/lib/libtesseract.so.5
         /usr/lib/x86_64-linux-gnu/libopencv_core.so
         /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so
         /usr/lib/x86_64-linux-gnu/libopencv_highgui.so
         /usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqjpeg.so
         /usr/local/qwt-6.1.4-svn/lib/
         /usr/lib/x86_64-linux-gnu/
        /usr/lib/x86_64-linux-gnu/libleptonica.so.1.78.0
        /usr/lib/x86_64-linux-gnu/libleptonica.so.5.3.0
        /usr/lib/x86_64-linux-gnu/libleptonica.so
)
INCLUDE ( ${QT_USE_FILE} )

include_directories(
    /usr/include/opencv2/
  /usr/include/opencv2/core/
  /usr/local/qwt-6.1.4-svn/include
   /home/nishome/lichao/local/include/tesseract
   /usr/local/include/leptonica/
)
set ( _SRCS
tesseract.cpp
)
QT4_ADD_RESOURCES(RSCS ${_RSCS})
#add_library(tesseract.cpp)

ADD_COMPILE_OPTIONS( -O3 -fsanitize=address -fno-omit-frame-pointer )
SET(CMAKE_EXE_LINKER_FLAGS  "-fsanitize=address")

ADD_COMPILE_OPTIONS(-O3)
add_executable(tesseract tesseract.cpp)
target_link_libraries(tesseract
-lqwt
 -L /usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/ -lqjpeg
-lQtGui
-lQtCore
-lopencv_core
-lopencv_imgproc
-lopencv_highgui
-ltesseract
-lleptonica
-fsanitize=address
)

编译安装tesseract
https://github.com/tesseract-ocr/tesseract/wiki/APIExample
https://github.com/wangdongxun/leptonica
openjp2库下载https://launchpad.net/ubuntu/+source/openjpeg2/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值