簡體   English   中英

如何在 python 中一次更改圖像的所有特定值(3D NumPy 數組)?

[英]How can I change all specific values of a image (3D NumPy array) at once in python?

我想更改 3D Ndarray 圖像文件中的所有特定值。
我正在將顏色圖映射到圖像文件。

例如:

for row in range(label_img.shape[0]):
    for col in range(label_img.shape[1]):
        img_png[row, col] = self.cmap.index(label_img[row, col, :].tolist())

其中 self.cmap 是一個二維列表值。

[[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0], [0, 0, 128], [128, 0, 128], [0, 128, 128], [128, 128, 128], [64, 0, 0], [192, 0, 0], [64, 128, 0], [192, 128, 0], [64, 0, 128], [192, 0, 128], [64, 128, 128], [192, 128, 128], [0, 64, 0], [128, 64, 0], [0, 192, 0], [128, 192, 0], [0, 64, 128], [128, 64, 128], [0, 192, 128], [128, 192, 128], [64, 64, 0], [192, 64, 0], [64, 192, 0], [192, 192, 0], [64, 64, 128], [192, 64, 128], [64, 192, 128], [192, 192, 128], [0, 0, 64], [128, 0, 64], [0, 128, 64], [128, 128, 64], [0, 0, 192], [128, 0, 192], [0, 128, 192], [128, 128, 192], [64, 0, 64], [192, 0, 64], [64, 128, 64], [192, 128, 64], [64, 0, 192], [192, 0, 192], [64, 128, 192], [192, 128, 192], [0, 64, 64], [128, 64, 64], [0, 192, 64], [128, 192, 64], [0, 64, 192], [128, 64, 192], [0, 192, 192], [128, 192, 192], [64, 64, 64], [192, 64, 64], [64, 192, 64], [192, 192, 64], [64, 64, 192], [192, 64, 192], [64, 192, 192], [192, 192, 192], [32, 0, 0], [160, 0, 0], [32, 128, 0], [160, 128, 0], [32, 0, 128], [160, 0, 128], [32, 128, 128], [160, 128, 128], [96, 0, 0], [224, 0, 0], [96, 128, 0], [224, 128, 0], [96, 0, 128], [224, 0, 128], [96, 128, 128], [224, 128, 128], [32, 64, 0], [160, 64, 0], [32, 192, 0], [160, 192, 0], [32, 64, 128], [160, 64, 128], [32, 192, 128], [160, 192, 128], [96, 64, 0], [224, 64, 0], [96, 192, 0], [224, 192, 0], [96, 64, 128], [224, 64, 128], [96, 192, 128], [224, 192, 128], [32, 0, 64], [160, 0, 64], [32, 128, 64], [160, 128, 64], [32, 0, 192], [160, 0, 192], [32, 128, 192], [160, 128, 192], [96, 0, 64], [224, 0, 64], [96, 128, 64], [224, 128, 64], [96, 0, 192], [224, 0, 192], [96, 128, 192], [224, 128, 192], [32, 64, 64], [160, 64, 64], [32, 192, 64], [160, 192, 64], [32, 64, 192], [160, 64, 192], [32, 192, 192], [160, 192, 192], [96, 64, 64], [224, 64, 64], [96, 192, 64], [224, 192, 64], [96, 64, 192], [224, 64, 192], [96, 192, 192], [224, 192, 192], [0, 32, 0], [128, 32, 0], [0, 160, 0], [128, 160, 0], [0, 32, 128], [128, 32, 128], [0, 160, 128], [128, 160, 128], [64, 32, 0], [192, 32, 0], [64, 160, 0], [192, 160, 0], [64, 32, 128], [192, 32, 128], [64, 160, 128], [192, 160, 128], [0, 96, 0], [128, 96, 0], [0, 224, 0], [128, 224, 0], [0, 96, 128], [128, 96, 128], [0, 224, 128], [128, 224, 128], [64, 96, 0], [192, 96, 0], [64, 224, 0], [192, 224, 0], [64, 96, 128], [192, 96, 128], [64, 224, 128], [192, 224, 128], [0, 32, 64], [128, 32, 64], [0, 160, 64], [128, 160, 64], [0, 32, 192], [128, 32, 192], [0, 160, 192], [128, 160, 192], [64, 32, 64], [192, 32, 64], [64, 160, 64], [192, 160, 64], [64, 32, 192], [192, 32, 192], [64, 160, 192], [192, 160, 192], [0, 96, 64], [128, 96, 64], [0, 224, 64], [128, 224, 64], [0, 96, 192], [128, 96, 192], [0, 224, 192], [128, 224, 192], [64, 96, 64], [192, 96, 64], [64, 224, 64], [192, 224, 64], [64, 96, 192], [192, 96, 192], [64, 224, 192], [192, 224, 192], [32, 32, 0], [160, 32, 0], [32, 160, 0], [160, 160, 0], [32, 32, 128], [160, 32, 128], [32, 160, 128], [160, 160, 128], [96, 32, 0], [224, 32, 0], [96, 160, 0], [224, 160, 0], [96, 32, 128], [224, 32, 128], [96, 160, 128], [224, 160, 128], [32, 96, 0], [160, 96, 0], [32, 224, 0], [160, 224, 0], [32, 96, 128], [160, 96, 128], [32, 224, 128], [160, 224, 128], [96, 96, 0], [224, 96, 0], [96, 224, 0], [224, 224, 0], [96, 96, 128], [224, 96, 128], [96, 224, 128], [224, 224, 128], [32, 32, 64], [160, 32, 64], [32, 160, 64], [160, 160, 64], [32, 32, 192], [160, 32, 192], [32, 160, 192], [160, 160, 192], [96, 32, 64], [224, 32, 64], [96, 160, 64], [224, 160, 64], [96, 32, 192], [224, 32, 192], [96, 160, 192], [224, 160, 192], [32, 96, 64], [160, 96, 64], [32, 224, 64], [160, 224, 64], [32, 96, 192], [160, 96, 192], [32, 224, 192], [160, 224, 192], [96, 96, 64], [224, 96, 64], [96, 224, 64], [224, 224, 64], [96, 96, 192], [224, 96, 192], [96, 224, 192], [224, 224, 192]]

np.where 和 np.all 似乎也很慢。

如何加快這些任務的速度?

您可以通過擺脫兩個for循環來加快該過程。 如果您在循環中使用np.wherenp.all ,那么這也難怪需要時間。

我主要有一種感覺,您最好不要使用numpy ......但是無論如何......所以要刪除for循環,我建議您執行以下操作:

for i in range(len(self.cmap)):
    img_png[np.where(np.all(label_img==self.cmap[i],axis=-1))]=i

它用一個小循環代替了兩個沉重for循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM