我正在尝试将每个轮廓的每个点写入图像,这可能不是最好的方法,但我有这个:
####### DRAW CONTOURS
for count, cntr in enumerate(contours):
print(f"Processing contour {str(count)} of {str(len(contours))}...", end="\r")
if len(cntr) < 5:
continue
x,y = sort_xy(cntr[:,0,0], cntr[:,0,1])
for i in range(0, len(x)):
image_path = f"./video_output/{str(i).zfill(10)}.jpg"
if count > 0: # This doesn't update
updated_image = cv2.imread(image_path)
cv2.circle(updated_image, (x[i],y[i]), 2, (0, 255, 0), thickness=1)
else: # This works
updated_image = cv2.circle(original_image, (x[i],y[i]), 2, (0, 255, 0), thickness=1)
if not cv2.imwrite(image_path, updated_image):
raise Exception("Could not write image")
我在检测轮廓时没有问题。
原始图像更新得很好,但是当我开始读取
count > 0
部分中的图像时,除了使用原始图像时的第一个轮廓之外,它似乎没有上传之前绘制的点。
当可视化时,它似乎只是将当前点写入文件,但不显示任何其他点。
不确定这是否有意义?
我尝试输出结果,第一个轮廓工作正常。第二个只是不保存或加载额外的积分。相反,它只显示轮廓的当前点,而不是以前的点。
代码中间有一个循环,循环遍历 x,y 点:
for i in range(0, len(x)):
在该循环中,您确定 image_path,它基于您正在处理的点的当前索引。注意
str(i)
:
image_path = f"./video_output/{str(i).zfill(10)}.jpg"
据推测,这意味着您正在处理的轮廓中的每个点都会有不同的
image_path
。您可能想要这样做:
image_path = f"./video_output/{str(count).zfill(10)}.jpg"
这将为每个轮廓创建一个新图像,而不是为每个轮廓中的每个点创建一个新图像。这可能无法彻底解决您的问题,但可能会让您走上正轨。