首页 > 解决方案 > 错误:(-215:断言失败)当我在函数中包含一个 for 循环时

问题描述

def preprocess_image(image_path,resize=False):
        
    for path in image_path:

        img = cv2.imread(path)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        img = img / 255
        if resize:
            img = cv2.resize(img, (224,224))
        return img

#preprocess_image(image_paths)
image_paths = glob.glob("Plate_examples/*.jpg")
print("Found %i images..."%(len(image_paths)))

# Visualize data in subplot 
fig = plt.figure(figsize=(12,8))
cols = 5
rows = 4
fig_list = []
for i in range(len(image_paths)):
    fig_list.append(fig.add_subplot(rows,cols,i+1))
    title = splitext(basename(image_paths[i]))[0]
    fig_list[-1].set_title(title)
    img = preprocess_image(image_paths[i],True)
    plt.axis(False)
    plt.imshow(img)

plt.tight_layout(True)
plt.show()

当我从函数中删除循环时,我想遍历所有图像并对它们执行操作,一切正常,我试图找到问题,但不能,任何人都可以帮忙。

标签: pythonnumpyopencvcv2

解决方案


image_paths是文件路径的列表。因此image_paths[i]是单个文件路径

img = preprocess_image(image_paths[i],True)

由于image_path函数的参数preprocess_image,是一个包含文件路径的字符串。for-loopfor path in image_path:遍历字符串的每个字符。如果你想要一个处理列表中所有图像的函数,那么你必须将文件列表传递给函数。在函数中,您必须用图像填充列表。最后从函数返回图像列表:

def preprocess_images(image_path_list, resize=False):
        
    images = []
    for image_path in image_path_list:

        img = cv2.imread(image_path)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        img = img / 255
        if resize:
            img = cv2.resize(img, (224,224))
        images.append(img)

    return images
images = preprocess_images(image_paths, True)

fig_list = []
for i, img in enumerate(images):
    
    fig_list.append(fig.add_subplot(rows,cols,i+1))
    title = splitext(basename(image_paths[i]))[0]
    fig_list[-1].set_title(title)
    plt.axis(False)
    plt.imshow(img)

推荐阅读