Python CV2,不写入或读取更新的图像

问题描述 投票:0回答:1

我正在尝试将每个轮廓的每个点写入图像,这可能不是最好的方法,但我有这个:

####### 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
部分中的图像时,除了使用原始图像时的第一个轮廓之外,它似乎没有上传之前绘制的点。

当可视化时,它似乎只是将当前点写入文件,但不显示任何其他点。

不确定这是否有意义?

我尝试输出结果,第一个轮廓工作正常。第二个只是不保存或加载额外的积分。相反,它只显示轮廓的当前点,而不是以前的点。

python opencv
1个回答
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"

这将为每个轮廓创建一个新图像,而不是为每个轮廓中的每个点创建一个新图像。这可能无法彻底解决您的问题,但可能会让您走上正轨。

© www.soinside.com 2019 - 2024. All rights reserved.