如何用椭圆有效地表示二值图像中的斑点? |打开简历

How to efficiently represent blobs in binary image with ellipse? | OpenCV

我想用定向椭圆表示斑点。

我在 opencv 中用 findContours() 实现了这个。但我正在考虑实时应用轮廓或斑点检测器,它们会表现更好。

GaussianBlur(im, tempIm, Size(9, 9), 1, 1, BORDER_REFLECT);
findContours(tempIm, contours, hierarchy, RETR_TREE, CHAIN_APPROX_TC89_KCOS);

Blur 还扩展了 blob 的边界,这不是必需的。

输入图片

输出图像

Contours 是对象的轮廓,blob detector 是在 findContours 之上的算法。 Blob 检测器不仅可以找到边界,还可以计算中心以及它是否与您定义的某些形状和大小相匹配。它比 findContours 更重,如果您关心性能并且不需要这些功能,则不应使用它。

如果您想保持图像二值化并且不扩展轮廓,您可以使用中值模糊而不是高斯模糊。您也可以使用 dilate/erode/open/close operations 及其组合来对二值图像进行去噪。这些方法在二进制图像上具有相对可比性,您可以测试最佳性能和结果,然后为您的任务选择一个。

Tutorial code here描述了如何用椭圆表示找到的轮廓。 cv::fitEllipse 用于为轮廓创建椭圆。然后就可以用cv::ellipse画图功能显示了