C++ 检测中心已知的部分隐藏椭圆的边界(OpenCV)
我必须在灰度图像中检测椭圆的边界。这些图像包含很多东西,但总是有一个(部分隐藏的)椭圆。我知道图像中椭圆的中心在哪里 优点:C++ 检测中心已知的部分隐藏椭圆的边界(OpenCV),c++,opencv,computer-vision,ellipse,C++,Opencv,Computer Vision,Ellipse,我必须在灰度图像中检测椭圆的边界。这些图像包含很多东西,但总是有一个(部分隐藏的)椭圆。我知道图像中椭圆的中心在哪里 优点: 椭圆总是可见的 椭圆中心附近的点是已知的 椭圆始终为黑色(8位上的值=[0,50]) 麻烦: 白色斑点(值=[220255])可以出现在椭圆中(而不是外部) 黑色人工制品(值=[0,80])可以隐藏0%到50%的椭圆和白色斑点(但中心仍然是已知的) 以下是4个示例图像,它们表示可能出现的不同情况: 我尝试过几种算法(霍夫圆、椭圆检测等),但没有一种能处理所有不同的情况。
欢迎所有建议 尝试RANSAC方法,它将允许您避免噪声边缘并精确拟合椭圆。椭圆有两个焦点,你们可以找到它们,知道你们的椭圆方程,然后找到它们之间的中间。它将是你的椭圆重心
RANSAC椭圆拟合代码示例:每个图像仅1个椭圆?麻烦1说明椭圆外没有白色。。。您的示例图像中的白色背景如何?对执行时间有一些限制?每个图像只有一个“黑色”椭圆。背景不是白色的,也不均匀,通常是灰色的[50150]。如果可能,执行时间必须在1ms左右。可以允许较大的执行时间,但不超过3ms