1. 流程
• 读取图像
• 灰度图像
• 进行膨胀和腐蚀以消除图像中不需要的噪声。
• 去除噪点后写图像。
• 应用阈值以获取唯一的黑白图片。
• 写入相同的图像以进行进一步的识别过程。
• 使用Tesseract进行字符识别。
2. 代码实现
int main()
{
char* path = "E:\\code\\Yolov5_Tensorrt_Win10-master\\pictures\\2.png";
Mat src = imread(path);
if (src.empty()) {
return -1;
}
cv::Mat gray;
cv::cvtColor(src, gray, COLOR_BGR2GRAY);
cv::Mat kernel = cv::getStructuringElement(MORPH_RECT, Size(1, 1));
cv::dilate(gray, gray, kernel, cv::Point2d(-1, -1), 20);
cv::erode(gray, gray, kernel, cv::Point2d(-1, -1), 20);
cv::adaptiveThreshold(gray, gray, 300, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY, 31, 2);
cv::imshow("gray", gray);
cv::waitKey(0);
cv::imwrite("threshold.tiff", gray);
char* outText;
tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI();
// Initialize tesseract-ocr with English, without specifying tessdata path
char* config = "--oem 1";
if (api->Init("E:\\code\\Yolov5_Tensorrt_Win10-master\\build\\3rdparty\\tesseract-3.05.01", "eng", tesseract::OcrEngineMode::OEM_DEFAULT)) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
Open input image with leptonica library
Pix* img_pix = pixRead("threshold.tiff");
api->SetImage(img_pix);
// Get OCR result
outText = api->GetUTF8Text();
printf("OCR output:\n%s", outText);
// Destroy used object and release memory
api->End();
delete api;
delete[] outText;
pixDestroy(&img_pix);
return 0;
}
3. 识别效果
输入图
目前来说识别效果不太好,还需进行调整
参考:Python视觉实战项目71讲(更新).pdf 将python代码修改c++