我正在寻找一种pythonic方法来制作一个元组列表,这些元组查看一系列点确定这些点的像素信息是否符合条件,如果是这样,就会添加到列表中。
我有以下代码行,我知道这是不正确的,但我希望它能解释我想要完成的任务。 " h,s,v = img [iy,((x // 2)-ix)]"部分不正确,因为我不认为你不能分配h,s,v我目前如何拥有代码。
如何在for循环中分配h,s,v = img []?
pointlist = [h,s,v = img[iy,((x//2)-ix)] for ix in range(x//2) for iy in ylist if any((hm-hsm)<h<(hm+hsm) and (sm-ssm)<s<(sm+ssm) and (vm-vsm)<v<(vm+vsm) for hm,sm,vm,hsm,ssm,vsm in csample)]
另一种可能写这个的方法是:
csample = (60,30,100,15,15,25)
for iy in ylist:
for (x//2)-ix for ix in range(x//2):
h,s,v = img[iy,ix]
if any((hm-hsm)<h<(hm+hsm) and (sm-ssm)<s<(sm+ssm) and (vm-vsm)<v<(vm+vsm) for hm,sm,vm,hsm,ssm,vsm in csample)
答案 0 :(得分:2)
您的要求并没有明确说明,但我认为这就是您的想法:
<强>代码:强>
可能需要解释的一件事是isgood(*img...)
。这会扩展tuple
中存储的img
,并将三个元素作为sperate args传递给is_good
。请参阅here。
hm, sm, vm, hsm, ssm, vsm = csample
def is_good(h, s, v):
return (hm-hsm < h < hm+hsm and
sm-ssm < s < sm+ssm and
vm-vsm < v < vm+vsm
)
point_list = [(ix, iy) for iy in ylist for ix in range(x//2+1)
if is_good(*img[iy, x//2-ix])]
测试数据:
csample = (60, 30, 100, 15, 15, 25)
img = (
((1, 2, 3), (1, 2, 3)),
((60, 30, 100), (1, 2, 3)),
)
ylist = [0, 1]
x = 2
制作:
[(1, 1)]