这是python的新手,所以这可能非常简单。
我正在使用PIL,并且我已经使用Image.getdata()生成了一个像素信息列表。我的目标是找到图像红色通道中的所有暗像素,并创建它们在整个像素列表中出现的位置的列表。这就是我所拥有的。
import PIL
from PIL import Image
import os
os.chdir('Correct Path')
im=Image.open('TRY.jpg')
im=im.getchannel(0)
pixels = list(im.getdata())
dark = []
dposition = []
for a in pixels:
if a<100:
dark.append(a)
print(dark)
因此,我的目标是用列表“像素”中所有暗像素的位置填充列表"dposition“,但我完全不知道如何做到这一点!到目前为止,列表"dark“用于显示红值<100的所有像素的值。如有任何帮助,我们将不胜感激,谢谢!
发布于 2018-06-16 12:06:58
你创建了一个一维数组,所以大多数其他答案都会给出你在该一维数组中的位置。如果你需要x
和y
职位,下面是你可以做的:
import PIL
from PIL import Image
import os
import numpy as np
im=Image.open('cat.jpg')
im=im.getchannel(0)
转换为二维numpy数组。
im = np.asarray(im)
dposition = []
for i, row in enumerate(im):
for j, pixel in enumerate(row):
if pixel < 100:
dposition.append((i, j))
print(dposition)
发布于 2018-06-16 07:54:47
将for循环更改为:
for a in range(0,len(pixels)):
if pixels[a]<100:
dark.append(pixels[a])
dposition.append(a)
本质上,这允许我们访问像素红色通道数据和列表中该像素的索引,因此每次我们将某些内容添加到暗像素列表中时,我们都会将其索引添加到dposition列表中。
发布于 2018-06-16 07:55:33
您需要的是一种在遍历列表时确定索引位置的方法。在遍历列表时,您可以创建一个简单的计数器而不是增量:
dark = []
dposition = []
count = 0
for a in pixels:
if a<100:
dark.append(a)
dposition.append(count)
count += 1
或者,您可以使用Python内置的enumerate
函数在遍历位置时生成位置:
dark = []
dposition = []
for position, a in enumerate(pixels):
if a<100:
dark.append(a)
dposition.append(position)
https://stackoverflow.com/questions/50883894
复制相似问题