3

我正在尝试开发一个程序来跟踪车牌。我需要跟踪车牌并用 ID 号标记它们,这样我就可以只为每个车牌调用一次识别程序。我有跟踪问题。一旦成功检测到车牌区域,我就会创建掩码以仅从车牌中提取特征,然后在整个图像上跟踪它们。我使用goodFeaturesToTrack()并计算光流calcOpticalFlowPyrLK()。这是我的算法:

  1. 从相机获取帧。
  2. 找车牌。
  3. 从车牌区域提取特征。
  4. 从相机获取下一帧。
  5. 从框架中提取特征。
  6. 调用 calcOpticalFlowPyrLK()
  7. 虽然我们成功地跟踪了车牌中至少一半的特征,但我们会跟踪特征并将特征与下一个特征交换。

代码(仅部分):

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);
        }
    }
}

输出是:

在此处输入图像描述

绿点是以前的特征,红点是实际特征。

如您所见,它们在某种程度上被很好地跟踪,但看起来它们被缩放并远离车牌。我只想从车牌中提取特征一次,然后只从框架中提取特征。我的逻辑有问题。这里可能有什么问题?

4

0 回答 0