如何用椭圆有效地表示二进制图像中的斑点? | OpenCV的

问题描述 投票:0回答:1

我想表示具有定向椭圆的blob。

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

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

Blur也扩展了blob的边界,这是不需要的。

输入图像

输出图像

c++ opencv blob ellipse
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.