Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 彩色图像中水平圆边缘的检测_Opencv_Image Processing_Computer Vision_Edge Detection - Fatal编程技术网

Opencv 彩色图像中水平圆边缘的检测

Opencv 彩色图像中水平圆边缘的检测,opencv,image-processing,computer-vision,edge-detection,Opencv,Image Processing,Computer Vision,Edge Detection,我试图在彩色图像中检测包含椭圆形顶部的区域 下面是我画的一些例子: 你将如何做到这一点?我在图像处理方面没有经验,但我愿意阅读和学习。我主要使用C++的OpenCV,但是我也可以使用其他的库。 一般来说,你所问的东西是一个大问题。在现实世界的图像中,你需要找到每一个椭圆形状,区分哪一个有顶(直到你容忍和考虑的角度)。然后,您需要很好地分割这些形状,以便可以找到顶部为椭圆形对象的区域 但是,如果您需要像示例中那样找到更简单的图像,但仍然是一种更通用的方法,则可以首先使用任何边缘检测(例如Can

我试图在彩色图像中检测包含椭圆形顶部的区域

下面是我画的一些例子:


你将如何做到这一点?我在图像处理方面没有经验,但我愿意阅读和学习。我主要使用C++的OpenCV,但是我也可以使用其他的库。

一般来说,你所问的东西是一个大问题。在现实世界的图像中,你需要找到每一个椭圆形状,区分哪一个有顶(直到你容忍和考虑的角度)。然后,您需要很好地分割这些形状,以便可以找到顶部为椭圆形对象的区域

但是,如果您需要像示例中那样找到更简单的图像,但仍然是一种更通用的方法,则可以首先使用任何边缘检测(例如Canny)获得边缘。然后,对曲线和椭圆使用Hough变换。但我不认为有函数或库用于此。因此,您可能需要实现自己的Hough变换。为此,你们必须决定你们所说的椭圆形顶部到底是什么意思。对于您的两张图像,如果您成功找到椭圆形顶部,只需获取其下方的区域即可。但为了更全面,您可能需要使用更复杂的方法在其下分割形状

对于Hough变换;
一般来说,你要问的是一个大问题。在现实世界的图像中,你需要找到每一个椭圆形状,区分哪一个有顶(直到你容忍和考虑的角度)。然后,您需要很好地分割这些形状,以便可以找到顶部为椭圆形对象的区域

但是,如果您需要像示例中那样找到更简单的图像,但仍然是一种更通用的方法,则可以首先使用任何边缘检测(例如Canny)获得边缘。然后,对曲线和椭圆使用Hough变换。但我不认为有函数或库用于此。因此,您可能需要实现自己的Hough变换。为此,你们必须决定你们所说的椭圆形顶部到底是什么意思。对于您的两张图像,如果您成功找到椭圆形顶部,只需获取其下方的区域即可。但为了更全面,您可能需要使用更复杂的方法在其下分割形状

对于Hough变换;
对于将其与椭圆一起使用,实际上有一个函数可以检测opencv上的圆

与低参数2一起使用-因为您应该只检测给定顶部的圆

另一种方式应该是这样的

1-低通滤波器(高斯模糊,在opencv文档中搜索)

2-颜色过滤器-可选(如果您知道对象的颜色,请使用该颜色,否则请尝试从像素(image.width/2,0)获取颜色)

3-canny边缘检测(再次参考文档)

4-查找等高线(再次参考文档)

5-如果你有一个轮廓,最好是大面积的,包括像素(image.width/2,0)-你将在这里使用PointPolyContest-然后你在底部有一个斑点

6-检测这个斑点是否是“椭圆形”是一个大问题;但是你可以使用“椭圆形”属性进行一些过滤

  • 椭圆曲线有1个且只有1个峰值点。应该只有1个轮廓像素具有最大高度
  • 椭圆曲线的任何3点都不能代表直线。这不难实现,但对于算法来说很复杂

opencv上实际上有一个检测圆的功能

与低参数2一起使用-因为您应该只检测给定顶部的圆

另一种方式应该是这样的

1-低通滤波器(高斯模糊,在opencv文档中搜索)

2-颜色过滤器-可选(如果您知道对象的颜色,请使用该颜色,否则请尝试从像素(image.width/2,0)获取颜色)

3-canny边缘检测(再次参考文档)

4-查找等高线(再次参考文档)

5-如果你有一个轮廓,最好是大面积的,包括像素(image.width/2,0)-你将在这里使用PointPolyContest-然后你在底部有一个斑点

6-检测这个斑点是否是“椭圆形”是一个大问题;但是你可以使用“椭圆形”属性进行一些过滤

  • 椭圆曲线有1个且只有1个峰值点。应该只有1个轮廓像素具有最大高度
  • 椭圆曲线的任何3点都不能代表直线。这不难实现,但对于算法来说很复杂

我建议使用一种比圆的Hough变换更简单的方法。 从上面的图片中,我看到椭圆形有一个统一的颜色,而其余的颜色 图像不存在

  • 选择合适的颜色空间(可能是HSV)
  • 将灰度作为色调或饱和度-这些将描述图像中的颜色(而不是像素的强度)
  • 计算(2)的梯度
  • 渐变为0的像素属于椭圆形

  • 对于圆,我建议使用比Hough变换更简单的方法。 从上面的图片中,我看到椭圆形有一个统一的颜色,而其余的颜色 图像不存在

  • 选择合适的颜色空间(可能是HSV)
  • 将灰度作为色调或饱和度-这些将描述图像中的颜色(而不是像素的强度)
  • 计算(2)的梯度
  • 渐变为0的像素属于椭圆形

  • 对于椭圆检测,您可以参考。这两种方法基于hough变换,如果需要,可以轻松调整。

    对于椭圆检测,您可以参考。这两种方法基于hough变换,如果需要,可以轻松调整。

    正如我所知,opencv中的圆检测器无法检测椭圆形状。作为它们的数学数学定义将不同?抱歉,我不喜欢opencv,因为我知道opencv中的圆检测器无法检测椭圆形状。因为它们的数学定义将不同?抱歉,我不喜欢opencv虽然这种方法可以帮助处理这两幅图像,但问题不是“我想在这些图像中找到这两个颜色一致的对象”