我目前正在做一个项目,我需要在视频中定位墨滴,执行诸如体积估计、速度和在它变成球形之前行进的距离等测量。
首先,我想知道我在处理这个项目时是否走在正确的轨道上。目前我有:
1.) 将原图转为灰度图
2.) 应用高斯模糊然后 Canny 边缘检测(单击此处查看图像)
3.)定位白色像素,findNonZero()
然后计算行块的总和以及白色像素集中度最高的块,并将其上方的所有行都裁剪掉)。这会移除图像中的打印头,因此 ROI 只是其下方的液滴。
4.) 用于findContours
查找轮廓。(点击这里查看图片)
以上4个步骤是我到目前为止所做的。以下步骤是我接下来应该做的吗?
- 在裁剪后和寻找轮廓之前先扩张二值图像以确保轮廓将关闭而不是打开?
- 也许忽略那些非常开放的?(有关如何实际执行此操作的任何提示?)
floodFill()
每个封闭的圈子- 使用以下方法找到每个轮廓的区域
contourArea()
(然后我可以在这一步之后用一些假设来估计液滴的体积,比如它的形状、像素与体积比等吗?) - 找到每个轮廓的中心并将其保存到一个数组中,以便我可以将其与下一帧中同一滴的中心进行比较。一旦我知道液滴中心的行进距离和视频的帧速率,我应该能够估计速度。
我也不确定如何给 drop 一个 ID,以便我可以确定我正在正确跟踪它并知道新的 drop 何时进入 ROI。
任何帮助将不胜感激,谢谢。