Я изучил программирование, обработку изображений, OpenCV, C ++ и Visual Studio в течение одного месяца, и у меня проблемы с решением. Мне нужна помощь и пролить немного света.
Я пробовал код из этого Веб-сайт для обнаружения цифр с помощью библиотеки opencv, но из 7 обнаруженных цифр исправляются только 3 цифры. Какие параметры должны быть изменены? Кроме того, обнаружение начинается с правого нижнего угла влево-вверх, не должно быть обнаружено сверху слева-направо? что я должен изменить?
Если вы используете его код и ресурсы, все будет в порядке, но если вы протестируете его код на другом изображении с другими номерами и опечаткой, вы можете попробовать это образ что используется в этом образец (Python).
Вам нужно заменить его данные поезда на эти:
// Loading digit models
HOGDescriptor h(Size(20, 20), Size(10, 10), Size(5, 5), Size(5, 5), 9);
std::vector<float> hdata;
Mat data(Size(324, 5000), CV_32FC1);
Mat responses(Size(1, 5000), CV_32FC1);
for (int i = 0; i < 50; i++) {
for (int j = 0; j < 100; j++) {
h.compute(digits(Rect(j * 20, i * 20, 20, 20)), hdata);
for (unsigned int k = 0; k < hdata.size(); k++) {
data.at<float>(i * 100 + j, k) = hdata[k];
}
responses.at<float>(i * 100 + j, 0) = (float)floor(i / 5.0);
}
}
KNearest knearest(data, responses);
В моем случае я использую функции HOG, так как они лучше отображают цифры. Здесь цифра — это изображение, которое я цитировал выше. И чтобы соответствовать:
Mat sample(Size(324, 1), CV_32FC1);
h.compute(digit, hdata);
for (unsigned int k = 0; k < hdata.size(); k++) {
sample.at<float>(0, k) = hdata[k];
}
Mat results, neighborResponses, dists;
cout << "Recognised: " << knearest.find_nearest(sample, 7, results, neighborResponses, dists) << endl;
Если вам нужно обнаружить черные буквы на белом фоне, вам нужно будет восстановить образцы:
digit = 255 - digit;
Я никогда не пробовал, но вы могли бы также использовать эти Функции OpenCV для обнаружения и распознавания текста. Это может быть проще с лучшими результатами.
Удачи.