【发布时间】:2021-05-13 22:19:20
【问题描述】:
我正在尝试根据某些输入图像(下面的第二个图像)中的覆盖区域(参见下面的第一个图像)来存档绘制凸包点。对于此操作,我正在执行以下操作:
- 在第一张图片中找到轮廓。
- 在第二张图片中找到轮廓。
- 对于第一张图像中的每个轮廓区域,与第二张图像中的所有轮廓进行比较,并检查它们是否在第一张图像的轮廓内。如果在轮廓区域内,则将轮廓的
x, y坐标附加到列表中。 - 在列表中绘制凸包点。
我的问题是第 3 步花费了太多时间,因为比较了第二张图像中的每个轮廓。有没有办法优化这段代码?
for coverContour in coverContours:
try:
points_ = []
for pointsContour in pointsContours:
((x, y), r) = cv2.minEnclosingCircle(pointsContour)
if (cv2.pointPolygonTest(coverContour, (int(x), int(y)), False)) == 1:
point_list.append((int(x), int(y)))
points_.append(Point(int(x), int(y)))
draw_point = Point.convex_hull(points_, len(points_))
for x in range(len(draw_point)-1):
cv2.line(layer, (points_[draw_point[x]].x, points_[draw_point[x]].y),
(points_[draw_point[x+1]].x, points_[draw_point[x+1]].y), (255, 255, 255), line_thickness)
cv2.line(layer, (points_[draw_point[len(draw_point)-1]].x, points_[draw_point[len(draw_point)-1]].y),
(points_[draw_point[0]].x, points_[draw_point[0]].y), (255, 255, 255), line_thickness)
except:
print('')
封面图片:
输入图片:
最终图像:
【问题讨论】:
标签: python opencv optimization convex-hull