使用C++结合OpenCV和Tesseract进行图像文字识别
最编程
2024-08-04 17:26:17
...
#define _CRT_SECURE_NO_DEPRECATE
#include "main.h"
#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>
using namespace cv;
int main()
{
std::string image_name = "3.jpg";
Mat imageMat;
imageMat = imread(image_name);
if (imageMat.data == nullptr)
{
printf("No image data \n");
return -1;
}
Mat blurMat;
// 图像模糊
// cv::medianBlur(imageMat, blurMat, 5);
// 灰度图
Mat z1, z2;
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", WINDOW_AUTOSIZE);
imshow("Image1", g_grayImage);
//waitKey(0);
//控制台中文异常
std::system("chcp 65001");
char *outText;
tesseract::TessBaseAPI api;
// Initialize tesseract-ocr with English, without specifying tessdata path
if (api.Init(NULL, "chi_sim"))
{
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);
// Get OCR result
outText = api.GetUTF8Text();
if (outText == nullptr)
{
std::cout << "没有数据" << std::endl;
}
// printf("OCR output:\n%s", outText);
std::cout << outText << std::endl;
// Destroy used object and release memory
api.End();
// delete api;
delete[] outText;
// pixDestroy(&image);
return 0;
}
上一篇: 提升体验:网易视频云的秒开和流畅播放优化
下一篇: 全程24小时慢镜头直播搭建过程