在图像/矩阵中创建随机白色矩形/阵列
我有一个图像保存为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个嵌套循环,没有更好的方法吗?
对于处理大型矩阵,您应该使用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
完美的工作!你有没有想法用不同的“厚度”以类似的方式制作对角线? – pythonFriend
您可以根据厚度使用具有偏移的'np.diagonal'。 –
顺便说一句,如果我的答案已解决您的问题,请点击复选标记考虑[接受它](http://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。 –
你如何存储你的矩阵?它只是普通的Python嵌套整数列表? –