首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OpenCV C++检测和跟踪视频中的液滴的步骤

使用OpenCV C++检测和跟踪视频中的液滴的步骤
EN

Stack Overflow用户
提问于 2013-04-13 09:02:59
回答 1查看 2.5K关注 0票数 3

我目前正在做一个项目,在这个项目中,我需要在视频中定位墨迹,执行诸如体积估计、速度和距离等测量,然后再将其变成球形。

首先,我想知道在处理这项计划方面,我是否走对了路。现在我有:

1.)将原始图像转换为灰度

2.)应用高斯模糊然后Canny边缘检测(点击这里获取图像)

3.)使用findNonZero()定位白色像素,然后计算行块和具有最高浓度白色像素的块的总和,并将其上方的所有行裁剪出来)。这将移除图像中的打印头,因此ROI只是其下方的液滴。

4.)使用findContours来寻找轮廓。(点击这里获取图像)

以上四个步骤是我迄今所做的。下面的步骤是我下一步应该做的吗?

  • 在裁剪后,先放大二值图像,然后再找出轮廓,以确保轮廓是封闭的,而不是打开的?
  • 也许忽略那些非常开放的?(对于如何真正做到这一点,有什么建议吗?)
  • floodFill()每一个闭圆
  • 使用contourArea()找出每个等值线的面积(然后我能用形状、像素与体积比等几个假设来估算这个步骤之后下降的体积吗?)
  • 找到每个轮廓的中心,并将其保存到一个数组中,这样我就可以将其与下一个帧中相同下降的中心进行比较。一旦我知道液滴中心的距离和视频的帧速率,我应该能够估计速度。

我也不确定我如何能给一个滴滴一个ID,所以我可以确定我是正确地跟踪它,并知道何时一个新的下降已经进入ROI。

任何帮助都将不胜感激,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-13 23:12:03

我认为你的想法是好的,可以很容易地扩展到一些能让你满意的事情。

为了澄清,我将称为红色ROI从您的形象"redROI“。

  1. 在redROI中找到所有的液滴。记住位置和身份证。
  2. 对于前面步骤中的每个液滴位置,创建一个类似于黄色矩形的ROI:

对于每个矩形,检查其中是否有液滴。

如果是的话--可能是上一个画面中的液滴,所以你要找的那个。

如果不是,你可以尝试再次搜索一个更大的矩形,或者假设这个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文件开始)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15986107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档