我正在研究检测任何物体的形状。我有一个二进制图像,背景为白色,前景/对象为黑色。我需要在黑色的前景中检测对象的形状。
我该怎么做?形状可能是人/汽车/盒子等。请帮助
最佳答案
我不确定如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/