小编Mar*_*ghi的帖子

如何使这个循环更快?

我希望我的图像只有 10 种特定颜色,在 color_list 中指定。因此,我循环遍历每个像素,如果该像素的颜色未包含在颜色列表中,则分配相邻区域的颜色。但由于图像是 2k x 2k 像素。这个循环大约需要 3 分钟。我确信我这样做的方式不是最佳的。我该如何优化我的做法?

atlas_img_marked, atlas_img_cleaned = clean_img_pixels(atlas_img, color_list)

def clean_img_pixels(atlas_img, color_list):
    dd = 3
    for ii in range(atlas_img.shape[0]-1):
        for jj in range(atlas_img.shape[1]-1):
            pixelcolor = (atlas_img[ii,jj,0],atlas_img[ii,jj,1],atlas_img[ii,jj,2])
            if pixelcolor not in color_list:
                pixel2color = (atlas_img[ii-dd,jj,0],atlas_img[ii-dd,jj,1],atlas_img[ii-dd,jj,2])
                if (pixel2color == (0,0,0)) | (pixel2color not in color_list):
                    pixel2color = (atlas_img[ii+dd,jj,0],atlas_img[ii+dd,jj,1],atlas_img[ii+dd,jj,2])
                    if (pixel2color == (0,0,0)) | (pixel2color not in color_list):
                        pixel2color = (atlas_img[ii+5,jj,0],atlas_img[ii+5,jj,1],atlas_img[ii+5,jj,2])
                atlas_img_cleaned[ii,jj] = pixel2color
    return atlas_img_cleaned
Run Code Online (Sandbox Code Playgroud)

更准确地说,这是花费最长的部分:

out_colors = []
for ii in range(atlas_img.shape[0]-1):
    for jj …
Run Code Online (Sandbox Code Playgroud)

python optimization performance loops

5
推荐指数
1
解决办法
118
查看次数

标签 统计

loops ×1

optimization ×1

performance ×1

python ×1