图像处理中的形状检测

时间:2010-04-04 12:32:07

标签: opencv image-processing computer-vision object-detection

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

我该怎么办?形状可以是男/车/盒等。请帮忙

2 个答案:

答案 0 :(得分:2)

我不确定你的最终目标是什么,因为amphetamachine说但是一种非常常见的检测形状的方法可能是使用 cvFindContours 给出二进制图像并返回一组' CvContour '(实际上是cvSeq)。通过阈值化图像(cvThreshold)可以非常简单地检索二值图像。查看示例/ opencv src目录中的contours.c示例。也请查看此链接:

Noah (2009) opencv tutorial

此示例代码将为您提供一般概念:

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个等高线并返回这些轮廓之间的相似度。

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

答案 1 :(得分:2)

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