测试环境:
vs2019
tesseract-5.2
opencv-3.4.4
代码如下:
#include <stdio.h>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <leptonica/allheaders.h>
#include <tesseract/baseapi.h>
#include <tesseract/publictypes.h>
#include <opencv2/imgproc.hpp>
int main()
{
std::string image_name = "D:/text.jpg";
cv::Mat imageMat;
imageMat = cv::imread(image_name);
if (imageMat.data == nullptr)
{
printf("No image data \n");
return -1;
}
//cv::Mat blurMat;
//cv::medianBlur(imageMat, blurMat, 5); // 图像模糊
cv::Mat z1, g_grayImage;
cv::cvtColor(imageMat, z1, cv::COLOR_BGR2GRAY); // 灰度图
// cv::threshold(z1, z2, 214, 255, cv::THRESH_BINARY); // 阈值
cv::adaptiveThreshold(z1, g_grayImage, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 7, 25); // 自动降噪
namedWindow("Image1", cv::WINDOW_AUTOSIZE);
cv::imshow("Image1", g_grayImage);
cv::waitKey(0);
std::system("chcp 65001");
char* outText;
tesseract::TessBaseAPI api;
//if (api.Init(NULL, "chi_sim")) // for chinese
if (api.Init("D:\\Program Files\\Tesseract-OCR\\tessdata", "eng", tesseract::OEM_DEFAULT))
{
std::cout << stderr << std::endl;
exit(1);
}
// Pix *image = pixRead("3.jpg");
api.SetImage((uchar*)g_grayImage.data, g_grayImage.cols, g_grayImage.rows, 1, g_grayImage.cols);
outText = api.GetUTF8Text();
if (outText == nullptr)
{
std::cout << "No Data" << std::endl;
}
std::cout << outText << std::endl;
// Destroy used object and release memory
api.End(); // delete api;
delete[] outText; // pixDestroy(&image);
return 0;
}
测试代码2:
tesseract::TessBaseAPI api;
api.Init("", "eng", tesseract::OEM_DEFAULT);
api.SetPageSegMode(static_cast<tesseract::PageSegMode>(7));
api.SetOutputName("out");
char image[256] = "myimage.png";
PIX *pixs = pixRead(image);
STRING text_out;
api.ProcessPages(image, NULL, 0, &text_out);
cout << text_out.string();