我想表示具有定向椭圆的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的边界,这是不需要的。
输入图像
输出图像
轮廓是对象的轮廓,blob detector是findContours
之上的算法。斑点检测器不仅可以找到边界,还可以计算中心以及它是否与您定义的特定形状和大小相匹配。它比findContours
更重,如果您关心性能并且不需要这些功能,则不应使用它。
如果要保持图像二进制并且不扩展轮廓,则可以使用中值模糊而不是高斯模糊。您还可以使用dilate/erode/open/close operations及其组合对二进制图像进行去噪。这些方法在二进制图像上具有相对可比性,您可以测试两者以获得最佳性能和结果,并为您的任务选择一个。
Tutorial code here描述了如何用椭圆表示找到的轮廓。 cv::fitEllipse
用于为轮廓创建椭圆。然后你可以用cv::ellipse
绘图功能显示它。