opencv - 如何使用 SURF 和 C 检测视频中的对象?

标签 opencv video-processing surf

我使用教程中的 SURF 程序来检测视频帧中的对象。但这会检测所有关键点和描述符。我如何更改程序以仅检测特定对象?

CvSeq *imageKeypoints = 0, *imageDescriptors = 0;
int i;


CvSURFParams params = cvSURFParams(500, 1);
cvExtractSURF( image, 0, &imageKeypoints, &imageDescriptors, storage, params );
printf("Image Descriptors: %d\n", imageDescriptors->total);


for( i = 0; i < imageKeypoints->total; i++ )
{
CvSURFPoint* r = (CvSURFPoint*)cvGetSeqElem( imageKeypoints, i );
CvPoint center;
int radius;
center.x = cvRound(r->pt.x);
center.y = cvRound(r->pt.y);
radius = cvRound(r->size*1.2/9.*2);
cvCircle( frame, center, radius, red_color[0], 1, 8, 0 );
}

最佳答案

该算法应该检测所有鲁棒的关键点。使用此类算法检测特定对象的唯一方法是拥有要检测的对象的图片(称为标记),以便能够将标记中的关键点与图像中的关键点进行比较。那些匹配的对意味着它们在 amrker 和图像中很常见。

了解该方法很重要:

1 - 您的标记上有您想要检测的图像。您可以使用 SURF、FAST、SIFT 或任何算法来检测关键点。这是离线的,您一开始只需执行一次。

2 - 您开始从视频中获取帧,并对每个帧使用 SURF 来检测视频中的关键点。

3 - 这是真正的处理部分,您可以在其中将标记中的点与图像中的点“匹配”。如果您没有得到匹配的对象,则该对象不在图像中。

看看这个example .

关于opencv - 如何使用 SURF 和 C 检测视频中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867412/

相关文章:

python - 不能在 OpenCV 中使用 SURF、SIFT

python - 在 Python 中重新映射 OpenCV 中的像素值的最快方法是什么?

linux - FFmpeg — 尝试替换音频时出现段错误

c# - 如何在 C# 中使用 RANSAC 过滤 OpenSURF 无效匹配

opencv - 拼接微芯片的显微镜图像

python-2.7 - 在opencv上的Videocapture之后读取总是返回false

python - 当我尝试取 2 个矩阵的点积时出现值错误

c++ - 删除面积 < n OpenCV 的边界矩形

opencv - 在 OpenCV 中加载捕获

android - 如何在Android应用程序中一起播放视频和音频