Я пытаюсь разработать программу для отслеживания номерного знака. Мне нужно отследить планшеты и пометить их идентификационным номером, чтобы я мог вызвать свою программу распознавания для каждого планшета только один раз. У меня проблема с отслеживанием. Как только я успешно обнаружил область номерного знака, я создаю маску, чтобы извлечь элементы только из пластины, а затем отследить их по всему изображению. я использую goodFeaturesToTrack()
и рассчитать оптический поток с calcOpticalFlowPyrLK()
, Это мой алгоритм:
Код (только часть):
bool licensePlate = false;
while(1)
{
frame = cvQueryFrame(cap);
if(frame.empty())
break;
cvtColor(frame, frame, CV_BGR2GRAY);
// We have license plate area
if (licensePlate)
{
frame.copyTo(image_next);
goodFeaturesToTrack(image_next, next_features, 50, 0.01, 0.1);
calcOpticalFlowPyrLK( image_previous, image_next, features, next_features, features_found, err );
swap(features, next_features);
}
// We try to obtain license plate area
if (!licensePlate)
{
squares = findLicensePlate(image);
if (!squares.empty())
{
// We have found license plate area
licensePlate = true;
frame.copyTo(image_previous);
Mat roi (mask, Rect(bb.x, bb.y, bb.width, bb.height));
roi.setTo(255);
goodFeaturesToTrack(image_previous, features, 50, 0.01, 0.1, mask);
mask.setTo(0);
}
}
}
И вывод:
Зеленые точки — это предыдущие функции, а красные — реальные.
Как вы можете видеть, они как-то хорошо отслеживаются, но похоже, что они масштабируются и работают далеко от автомобильного номера. Я хочу извлечь элементы из номерного знака только один раз, а затем извлечь элементы только из кадра.
Моя логика где-то не так. В чем может быть проблема здесь?
Задача ещё не решена.
Других решений пока нет …