Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.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
Python 区分圆形、矩形和方形_Python_Opencv_Opencv Contour - Fatal编程技术网

Python 区分圆形、矩形和方形

Python 区分圆形、矩形和方形,python,opencv,opencv-contour,Python,Opencv,Opencv Contour,鉴于这一形象 ,如何查找圆形、矩形和方形管道的数量? 我现在使用以下过滤器来获取管道的边缘。给定这些边,我使用Hough圆和findContours来计算圆和矩形计数。但问题是,该算法在矩形管道内找到圆,反之亦然。我如何解决这个问题 blur_hor = cv2.filter2D( img_bw[:, :, 0], cv2.CV_32F, kernel=np.ones((11, 1, 1), np.float32) / 11.0, borderType=cv2.BORDER_C

鉴于这一形象

,如何查找圆形、矩形和方形管道的数量? 我现在使用以下过滤器来获取管道的边缘。给定这些边,我使用Hough圆和findContours来计算圆和矩形计数。但问题是,该算法在矩形管道内找到圆,反之亦然。我如何解决这个问题

blur_hor = cv2.filter2D(
    img_bw[:, :, 0], cv2.CV_32F, kernel=np.ones((11, 1, 1), np.float32) / 11.0,
    borderType=cv2.BORDER_CONSTANT
)
blur_vert = cv2.filter2D(
    img_bw[:, :, 0], cv2.CV_32F, kernel=np.ones((1, 11, 1), np.float32) / 11.0,
    borderType=cv2.BORDER_CONSTANT
)
mask = (
    (img_bw[:, :, 0] > blur_hor * 1.2) | (img_bw[:, :, 0] > blur_vert * 1.2)
).astype(np.uint8) * 255
这是应用过滤器/遮罩后图像的外观:


可能有一些门槛或分数你可以随意摆弄。如果同一区域包含50%与圆形相似但98%与矩形相似的区域,则该区域可能是矩形。@MateenUlhaq,我尝试查找轮廓区域,并取圆形区域与轮廓区域以及矩形区域与轮廓区域的比率。无论哪一个接近一个都是形状,但它也有我上面提到的同样的问题。你的方形管道看起来相当圆,这可能是一个问题。您可能会找到一个hough参数化来解决这个问题,但它可能会影响您的回忆。NMS(非最大抑制)应该会有所帮助,它会删除重叠检测,因此正方形会变成没有内圈的正方形。请参阅