我正在使用 opencv 处理 c++ 中的膨胀问题。我已经捕获了停车场的视频帧,为了获得最好的 blob,我想出了这个。
- 侵蚀(5x5 内核矩形),3 次迭代
- Dilation GRADIENT(将其视为沿 y 轴的颜色渐变)
那么我做了什么来让它工作呢?首先,我需要知道 2 个点 (x,y) 和在这些点上 2 个良好的扩张核大小。有了这些信息,人们就可以在整个图像上对这些值进行插值和外推。所以我根据这些参数计算了投资回报率(大小和扩张内核大小)。所以每个 ROI 都有自己预定义的 kernelsize 用于扩张。请注意,两个连续的 ROI(opencv 矩形)之间没有任何空格。一切正常,但有两个副作用:
- 斑点两侧的凸起。黑线是 ROI 的边界! 凸出图片
- 从主 blob 中“切断”的 blob。这些实际上并没有被切断,但是上面一个blob下的ROI扩张(我认为从上面的ROI获取像素信息)成分开的blob。它应该是一个巨大的斑点。不应该在那里的 blob 图片
我已经尝试了所有改变 ROI 大小的方法,并在它们之间留下了一些空间,但缺点是 2 个单独的 ROI 之间的斑点没有扩大。
所以我的问题是:
- 究竟是什么导致了这些副作用?
- 我该怎么做才能让它们消失?
编辑
所以我找到了我的解决方案:当您调用 opencv dilate 函数时,需要确定是否可以将相同的 cv::Mat 用作目标图像。如果不是,您将使用原始图像和新图像的一部分。所以我所要做的就是包括一个目的地 cv::Mat。