Я внес некоторые изменения в изображение, такие как гистограмма, расширение, серая шкала, обнаружение краев и т. Д., Чтобы идентифицировать номерную табличку на изображении. Приведенный ниже код является частью того, где я нарежьте каждого фрахтователя на номерном знаке и сохраните его в Mat. Теперь я хотел бы использовать tesseract для идентификации каждого персонажа. но вместо тессеракта выкиньте это предупреждение. «Предупреждение. Неверное разрешение 0 точек на дюйм. Вместо него используется 70». и OCR-выход пуст. Может кто-нибудь мне помочь.
Примечание: сейчас я делаю только одну фотографию. просто чтобы проверить, работает ли он или нет.
if (!Plate.empty())
{
imshow("Final Plate", Plate);
waitKey();
int x = OTSU(Plate);
Mat BlurBinary = ConvertToBinary(Plate, x);
Mat BinPlate = BlurBinary.clone();
imshow("BinaryBlurImg", BlurBinary);
waitKey();
vector<vector<Point>>contours2;
vector<Vec4i>hierachy2;
findContours(BlurBinary, contours2, hierachy2, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point(0, 0));
Mat dst1 = Mat::zeros(BlurBinary.size(), CV_8UC3);
if (!contours1.empty()) {
int i = 0;
for (int i = 0; i < contours2.size(); i++) {
Scalar color((rand() & 255), (rand() & 255), (rand() & 255));
drawContours(dst1, contours2, i, color, CV_FILLED, 8, hierachy2);
}
}
Rect BlobRect2;
for (int i = 0; i < contours2.size(); i++) {
BlobRect2 = boundingRect(contours2[i]);
if (BlobRect2.height < 10)
{
drawContours(BinPlate, contours2, i, black, CV_FILLED, 8, hierachy2);
}
else
{
Mat character;
character = Plate(BlobRect2);
imshow("character", character);
waitKey();
imwrite(format("C:/Users/Di/source/repos/LPRrecognition/Characters/Img%d.tif", i), character);
}
}
}
else {
cout << "no plate sorry";
}
char *outText;
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
// Initialize tesseract-ocr with English, without specifying tessdata path
if (api->Init(NULL, "eng")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
// Open input image with leptonica library
Pix *image1 = pixRead("C:\\Users\\Di\\source\\repos\\LPRrecognition\\Characters\\Img1.tif");
api->SetImage(image1);
// Get OCR result
outText = api->GetUTF8Text();
printf("OCR output:\n%s", outText);
cout << outText;
// Destroy used object and release memory
api->End();
delete[] outText;
pixDestroy(&image1);