我正在努力检测任何物体的形状。我有一个二进制图像,其中背景为白色,前景/对象为黑色。我需要检测前景中黑色物体的形状。
我该怎么做?形状可能是人/车/盒子等。请帮忙
我正在努力检测任何物体的形状。我有一个二进制图像,其中背景为白色,前景/对象为黑色。我需要检测前景中黑色物体的形状。
我该怎么做?形状可能是人/车/盒子等。请帮忙
对于准确的形状检测,您需要使用 haar 检测或至少 K 个最近邻。Haar 检测可以非常准确,但需要很长时间才能设置。K 最近邻更容易设置,但不那么准确。看看这个 youtube 视频。这家伙正在使用 KNN 来检测不同的手势。请注意,比较图像基本上是一个黑色斑点。KNN的坏处是运行程序需要更多的资源,但是使用haar检测,当您使用haartraining.exe创建级联xml文件时已经完成了主要处理
正如 amphetamachine 所说,我不确定您的最终目标是哪一个,但检测形状的一种非常常见的方法可能是使用cvFindContours,它给出一个二进制图像并返回一组“ CvContour ”(实际上是一个 cvSeq)。通过对图像进行阈值处理(cvThreshold),可以非常简单地检索二进制图像。查看 opencv src 目录的 sample/ 中的 contours.c 示例。也检查这个链接:
此示例代码将为您提供一个总体思路:
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 个轮廓并返回这些轮廓之间的相似性度量。
希望这种方法为您提供一个良好的开端!