c++ - 检测已知中心的部分隐藏椭圆的边界(OpenCV)

标签 c++ opencv computer-vision ellipse

我必须检测灰色图像中椭圆的边界。这些图像包含很多东西,但总有一个(部分隐藏的)椭圆。我知道图像中这个椭圆的中心在哪里。

优点:

  1. 椭圆始终可见

  2. 椭圆中心附近的点已知

  3. 椭圆始终为黑色(8 位值 = [0, 50])

问题:

  1. 白色 Blob (值 = [220, 255])可以出现在椭圆内(而不是在椭圆外)

  2. 黑色伪像(值 = [0, 80])可以隐藏 0% 到 50% 的椭圆和白色 Blob (但中心仍然已知)

这里有 4 个示例图像,代表可能出现的不同情况:

Diagrams

我已经尝试了几种算法(霍夫圆、椭圆检测等),但没有一种算法能够应对所有不同的情况。此外,他们不受益于已知中心。 欢迎所有建议!

最佳答案

尝试使用 RANSAC 方法,它可以让您避免噪声边缘并准确拟合椭圆。椭圆有 2 个焦点,你可以找到它们,知道你的椭圆方程,然后找到它们之间的中间点。这将是你的椭圆质心。

RANSAC 椭圆拟合的代码示例:https://github.com/seisgo/EllipseFit

关于c++ - 检测已知中心的部分隐藏椭圆的边界(OpenCV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43240944/

相关文章:

c++ - 在 Linux ARM 上编译不支持 GUI 的 Qt5

c++ - map 操作(找到出现次数最多的元素)

matlab - Matlab函数 “m = size(X,dim)”在opencv中等效

android - 如何从 Android 相机中找到帧的轮廓并将它们转换为 box2d 主体?

computer-vision - pcl normal.compute 返回 NaN 值

C++ #define LPWSTR?

c++ - qt exe 应用程序的 dll 文件太大。该怎么办?

android - 比较连续的帧以确定使用OpenCV的运动方向

c++ - OpenCV SVM 在火车上抛出异常, "Bad argument (There is only a single class)"

visual-studio - Visual Studio 2012 上 OpenCV 2.4.2 中的 MSER 示例