我正在使用Canny边缘检测器来检测白色背景上的物体,并想在其周围绘制一个矩形和一个圆形。我可以获取边界矩形的坐标,但不能获取OpenCV函数minAreaRect
和minEnclosingCircle
的坐标。
import cv2
import numpy as np
img = cv2.imread(image.path, 0)
edges = cv2.Canny(img, 100, 200)
#Bounding Rectangle works
x, y, w, h = cv2.boundingRect(edges)
#This does not work
(x,y),radius = cv2.minEnclosingCircle(edges)
#This also does not work
rect = cv2.minAreaRect(edges)
错误:
我想这是因为Canny边缘检测器的结果格式错误,但是我找不到如何对其进行转换才能起作用的原因。
最佳答案
这些功能之间的区别在于boundingRect
在图像上起作用,而minEnclosingCircle
和minAreaRect
在2D点集上起作用。为了从Canny
的输出中获得一个点集,您可以按照this tutorial的建议使用findCountours
:
# im2, contours, hierarchy = cv.findContours(thresh, 1, 2) # OpenCV 3.x
contours, hierarchy = cv.findContours(thresh, 1, 2) # OpenCV 4.x
cnt = contours[0]
rect = cv.minAreaRect(cnt)
(x,y),radius = cv.minEnclosingCircle(cnt)
关于python - OpenCV:Canny边缘检测器获取minEnclosingCircle,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56119075/