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

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

最佳答案

我不确定如amphetamachine所说的,这是您的最终目标,但是检测形状的一种非常常见的方法可能是使用 cvFindContours ,它给出了一个二进制图像并返回了一组' CvContour '(实际上是cvSeq)。通过对图像进行阈值化(cvThreshold),可以非常简单地检索二进制图像。在opencv src目录的sample /中 checkout 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个轮廓,并返回这些轮廓之间的相似度。

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

关于opencv - 图像处理中的形状检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2574369/

10-09 20:40