我想请一些关于OpenCV的帮助(我目前是使用OpenCV的初学者)。
我打算测量一个物体在两帧之间的增长或移动。
例如:
_ _
= = = =
= = = =
= = = =
= = = =
= = = =
= = = =
~ ~
第一帧包含一个带有白色背景的黑色圆圈。
第二帧包含一个较大的圆圈,背景为白色。
我想要做的是获取圆圈的坐标(我不确定OpenCV中可用的哪些功能允许我分割圆圈并检索它的坐标)。然后减去坐标,以便我可以测量圆的增长。
我尝试了一些教程,但未能找到任何关于分割对象(如圆圈)的讨论,然后将其坐标打印或写入文件。
是否可以使用OpenCV执行此类操作,还是需要其他一些软件解决方案?
谢谢大家。
答案 0 :(得分:1)
在OpenCV中,您可以:
cvSnakeImage()
,它将图像作为输入并计算一组点cv::minEnclosingCircle()
的输入,它将返回圆的直径功能检测文档:http://opencv.willowgarage.com/documentation/feature_detection.html 结构/形状描述符doc:http://opencv.willowgarage.com/documentation/cpp/structural_analysis_and_shape_descriptors.html
也许你也可以使用光流(虽然我不熟悉它,所以我不确定)。
修改(回复评论):
函数cvMinEnclosingCircle()
返回“给定2D点集的最小区域的外接圆”(来自OpenCV doc) - 这意味着2D点集可以表示任何形状,而不仅仅是圆形。如果你知道你正在比较同一个物体的不同尺度,那么这个尺度是有意义的(因为你的物体的所有部分会同时增长或缩小,因此“推”或“收缩”外接圆圈。)
但实际上有一种更简单的方法:比较每张图像中的黑色像素数,它们代表区域。
或者,您可能有兴趣使用另一个专门用于细分的库,例如ITK。