1

我正在努力检测任何物体的形状。我有一个二进制图像,其中背景为白色,前景/对象为黑色。我需要检测前景中黑色物体的形状。

我该怎么做?形状可能是人/车/盒子等。请帮忙

4

2 回答 2

2

对于准确的形状检测,您需要使用 haar 检测或至少 K 个最近邻。Haar 检测可以非常准确,但需要很长时间才能设置。K 最近邻更容易设置,但不那么准确。看看这个 youtube 视频。这家伙正在使用 KNN 来检测不同的手势。请注意,比较图像基本上是一个黑色斑点。KNN的坏处是运行程序需要更多的资源,但是使用haar检测,当您使用haartraining.exe创建级联xml文件时已经完成了主要处理

于 2010-04-14T07:24:02.720 回答
2

正如 amphetamachine 所说,我不确定您的最终目标是哪一个,但检测形状的一种非常常见的方法可能是使用cvFindContours,它给出一个二进制图像并返回一组“ CvContour ”(实际上是一个 cvSeq)。通过对图像进行阈值处理(cvThreshold),可以非常简单地检索二进制图像。查看 opencv src 目录的 sample/ 中的 contours.c 示例。也检查这个链接:

诺亚(2009)opencv教程

此示例代码将为您提供一个总体思路:

cvThreshold( g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY );
cvFindContours( g_gray, g_storage, &contours );
cvZero( g_gray );
if( contours ){
    cvDrawContours(
        g_gray,
        contours,
        cvScalarAll(255),
        cvScalarAll(255),
        100 );
}
cvShowImage( "Contours", g_gray );

一旦对轮廓进行了编码,就可以使用cvMatchShapes,它采用 2 个轮廓并返回这些轮廓之间的相似性度量。

希望这种方法为您提供一个良好的开端!

于 2010-04-06T02:16:19.730 回答