在实时视频上检测 SURF 点

Detecting SURF points on real time video

我想检测实时视频源中的 SURF 特征点,但是,我似乎找不到任何关于如何实现这一点的教程。

我能够在静止图像上检测到它们:

    int minHessian = 400;
    cv::SurfFeatureDetector detector(minHessian);
    std::vector<cv::KeyPoint> keypoints_1;
    detector.detect(img_1, keypoints_1);
    cv::Mat img_keypoints_1;
    drawKeypoints(img_1, keypoints_1, img_keypoints_1);

但我不确定您如何使用 cvCaptureFromCAM() 将此应用于视频提要?

您的网络摄像头抓取的画面不过是单张图像。因此,无论您可以对单个图像做什么,都可以使用相同的方法在该帧上做同样的事情。

以下是您通过网络摄像头无限 for loop 接收 frame 的代码。基本上,您只需要阅读框架,然后执行与您在单个图像上所做的相同的操作。

Mat frame;
VideoCapture cap(0); // open the default camera
if (!cap.isOpened())  // check if we succeeded
    return -1;

for (;;)
{

    cap.read(frame); // get a new frame from camera
    if (frame.empty()) continue;

    //Now do the same thing with each frame which you did with your single image.

}