使用Python字典编辑图像
首先,我是编程新手,所以我可能会有一些愚蠢的问题;) 我创建了一本这样的词典:使用Python字典编辑图像,python,image,dictionary,Python,Image,Dictionary,首先,我是编程新手,所以我可能会有一些愚蠢的问题;) 我创建了一本这样的词典: cell = {(1,2):200,(1,2):200,(1,2):200,(1,2):200,...} 现在我用图像创建了一个新的图像。其思想是使用cell.keys()例如(1,2)来访问图像的像素坐标,并将值更改为键的值。我怎么能这么做?我尝试了这个“解包”,除了“无效语法”之外没有成功 只需使用k作为键: pixels[k] = k + (cell[k],) 您有一个RGB图像,因此需要一个具有3个值的元
cell = {(1,2):200,(1,2):200,(1,2):200,(1,2):200,...}
现在我用图像创建了一个新的图像。其思想是使用cell.keys()例如(1,2)来访问图像的像素坐标,并将值更改为键的值。我怎么能这么做?我尝试了这个“解包”,除了“无效语法”之外没有成功
只需使用
k
作为键:
pixels[k] = k + (cell[k],)
您有一个RGB图像,因此需要一个具有3个值的元组k
是一个具有两个值的元组,因此我猜您需要一个(I,j,random_值)
元组作为像素值
*k
仅适用于函数签名、调用和(在Python 3中)元组分配。它在索引或创建元组文字时没有特殊意义
请注意,将dict.update()
与单元素词典一起使用是。。效率低下。只需使用项目分配:
cell = {}
for i in range(255):
for k in range(255):
cell[(i,k)] = random.randrange(1,150,2)
然而,字典并不是密集矩阵的最佳数据存储格式;最好使用嵌套列表:
cell = [[random.randrange(1,150,2) for _ in range(255)] for _ in range(255)]
并通过以下方式解决此问题:
for i, row in enumerate(cell):
for j, value in enumerate(row):
pixels[i, j] = (i, j, value)
“无效语法”在哪一行?在“*k”@LutzHorn的最后一行可能在第四行:
{(i,k):random.randrange(1150,2)}
@utdemir:很好。@MartijnPieters;我的错,我不认为那是一个简单的字面上的口述,我认为那是某种口述理解的尝试。:)啊!!非常感谢。放置像素[k]=(k,单元格[k],)会出现以下错误:TypeError:函数至少接受3个参数(给定2个)@user3759978:该值不是嵌套元组。这取决于图像模式,该值应设置为什么。@user3759978:我看到您有一个'RGB'
(3波段)图像,所以您需要在这里使用一个包含三个值的元组。我必须坚持使用字典,因为这是我的主管的要求;)好主意^^是的,你的回答很有帮助;)
for i, row in enumerate(cell):
for j, value in enumerate(row):
pixels[i, j] = (i, j, value)