能否从具有粗糙曲率的一条线上的一组点创建多边形,使得这些点在两个曲率值之间选择?
我试图使用Python的OpenCV包(cv2
)从给定图像中检索一个近似的曲线四边形形状。
例如: 给定经过边缘检测的图像如下:
使用cv2.findContours找到轮廓,如下所示:
(顺便提一下:如果它能给出一个类似正方形的形状而不是绕着线走就太好了 - 还需要一种算法来填补该图像右侧形状的空隙。膨胀/腐蚀可能有效,但可能会丢失某些需要保留的特征。)
之后,我们可以像这样在轮廓上使用polyDPApprox:
相关问题: 在OpenCV中,是否可以绘制局部曲率作为热图来表示物体的“尖锐度”?
以下是用于分析输入图像的函数(如果有人需要):
# input binary image
def find_feature_points(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.namedWindow('img', WINDOW_NORMAL)
cv2.imshow("img", gray)
cv2.waitKey(0)
contours, hierarchy = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Draw contours to image
print contours
copy = img.copy()
# img - Image.
# pts - Array of polygonal curves.
# npts - Array of polygon vertex counters.
# ncontours - Number of curves.
# isClosed - Flag indicating whether the drawn polylines are closed or not. If they are closed, the function draws a line from the last vertex of each curve to its first vertex.
# color - Polyline color.
# thickness - Thickness of the polyline edges.
# lineType - Type of the line segments. See the line() description.
# shift - Number of fractional bits in the vertex coordinates.
cv2.polylines(img=copy, pts=contours, isClosed=1, color=(0,0,255), thickness=3)
cv2.namedWindow('contour', WINDOW_NORMAL)
cv2.imshow("contour", copy)
cv2.waitKey(0)
# Find approximation to contours
approx_conts = []
for c in contours:
curve = c
epsilon = 200
closed = True
approx_conts.append(cv2.approxPolyDP(curve, epsilon, closed))
# draw them
cv2.drawContours(img, approx_conts, -1, (0, 255, 0), 3)
cv2.namedWindow('approx', WINDOW_NORMAL)
cv2.imshow("approx", img)
cv2.waitKey(0)
return