我目前正在做一个项目,在这个项目中,我需要在视频中定位墨迹,执行诸如体积估计、速度和距离等测量,然后再将其变成球形。
首先,我想知道在处理这项计划方面,我是否走对了路。现在我有:
1.)将原始图像转换为灰度
2.)应用高斯模糊然后Canny边缘检测(点击这里获取图像)
3.)使用findNonZero()定位白色像素,然后计算行块和具有最高浓度白色像素的块的总和,并将其上方的所有行裁剪出来)。这将移除图像中的打印头,因此ROI只是其下方的液滴。
4.)使用findContours来寻找轮廓。(点击这里获取图像)
以上四个步骤是我迄今所做的。下面的步骤是我下一步应该做的吗?
floodFill()每一个闭圆contourArea()找出每个等值线的面积(然后我能用形状、像素与体积比等几个假设来估算这个步骤之后下降的体积吗?)我也不确定我如何能给一个滴滴一个ID,所以我可以确定我是正确地跟踪它,并知道何时一个新的下降已经进入ROI。
任何帮助都将不胜感激,谢谢。
发布于 2013-04-13 23:12:03
我认为你的想法是好的,可以很容易地扩展到一些能让你满意的事情。
为了澄清,我将称为红色ROI从您的形象"redROI“。

对于每个矩形,检查其中是否有液滴。
如果是的话--可能是上一个画面中的液滴,所以你要找的那个。
如果不是,你可以尝试再次搜索一个更大的矩形,或者假设这个ROI的黑暗设置点是你的液滴。如果ROI接近redROI的底部,那么液滴可能已经消失了--算了吧。
注意几件事:
矩形的-size取决于液滴移动的速度,以及它们只能垂直或对角线移动(风也可以改变移动方向)。
-before搜索液滴,检查所有矩形是否不相交(每个矩形没有任何公共区域-> (Rect1 & Rect2).area() == 0)。
-before在ROI中搜索液滴,确保这个ROI在redROI中。所以,只需使用以下代码:roi = roi & redROI;
在找到每一个旧液滴的新位置后,在整个redROI中搜索液滴,这样你就不会错过任何新的液滴。
如果你不理解这个想法的某些部分,请告诉我--我会尽量更好地解释它。
也许忽略那些非常开放的?(对于如何真正做到这一点,有什么建议吗?)
我不确定,所以去看看。尝试使用CV_RETR_LIST作为findContours的第三个参数,检查从返回的(由findContours返回的)轮廓的第一个和最后一个点之间的距离--如果距离大于等高线是打开的,如果没有--它是封闭的。
floodFill()每一个闭圆
您只需使用drawContours并将thickness参数设置为-1 --更简单、更快捷的解决方案。
编辑:
您也可以尝试使用光流--它已经在openCV中实现了,在这里您可以阅读关于光流的很好的教程:http://robotics.stanford.edu/~dstavens/cs223b/ (从.pdf文件开始)
https://stackoverflow.com/questions/15986107
复制相似问题