2016-02-27 402 views
0

我有一個圖像保存爲Python中的矩陣(512x512)。 現在我想添加一些具有常量大小的隨機矩形來模擬一些缺失的區域。 通常我會在圖像的大小範圍內創建一個隨機索引,並使用嵌套循環創建一個值爲255(在Python中爲白色)的5x5大小的數組。 我需要另一個循環來創建特定數量的矩形。 綜上所述,我需要3個循環:在圖像/矩陣中創建隨機白色矩形/陣列

for (0,amountOfRec): 
    startPoint = (randomIndex1,randomIndex2) 
     for (0,sizeOfRec)  #jump to next row 
       for (0,sizeOfRec) #create a row with value 255 

這種方式似乎很幼稚。如果沒有使用3個嵌套循環,沒有更好的方法嗎?

+0

你如何存儲你的矩陣?它只是普通的Python嵌套整數列表? –

回答

0

對於處理大型矩陣,您應該使用Numpy,它使您能夠使用矢量化操作以及其他許多優點。

假設你的圖像灰度(或具有隻是一個單一的RGB通道),並以簡單的嵌套數組形式表示,你可以嘗試這樣的事:

import numpy as np 

#Generate random "image" (replace this with your original image) 
img = np.random.randint(0,256, size=512**2).reshape(512,512) 

#Make white box 
box = np.array([255]*5*5).reshape(5,5) 

#Generate random coordinates 
x, y = np.random.randint(0,512-5, size=2) 

#Replace original image with white box 
img[x:x+5, y:y+5] = box 
+0

完美的工作!你有沒有想法用不同的「厚度」以類似的方式製作對角線? – pythonFriend

+0

您可以根據厚度使用具有偏移的'np.diagonal'。 –

+0

順便說一句,如果我的答案已解決您的問題,請點擊複選標記考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。 –