2016-02-27 125 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)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。 –