
On Wed, Oct 20, 2010 at 1:32 AM, Lutz Maibaum <lutz.maibaum@gmail.com>wrote:
On Oct 19, 2010, at 6:09 PM, Dewald Pieterse wrote:
for xiter in range(xindex): for yiter in range(yindex): if edges[xiter,yiter,:] == [255,0,0]: groenpixelarea = groenpixelarea + 1 if edges[xiter,yiter,:] == [0,255,0]: rooipixelarea = rooipixelarea + 1 if edges[xiter,yiter,:] == [0,0,255]: bloupixelarea = bloupixelarea + 1
results in:
16 for xiter in range(xindex): 17 for yiter in range(yindex): ---> 18 if edges[xiter,yiter,:].any() == [255,0,0]: 19 groenpixelarea = groenpixelarea + 1 20 if edges[xiter,yiter,:] == [0,255,0]:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() WARNING: Failure executing file: <analiseerverwerkteprent.py>
The array comparison results in an array of booleans, which cannot be used as a condition in the if statement. You could use
if alltrue(edges[xiter,yiter,:] == [255,0,0]): groenpixelarea = groenpixelarea + 1
This worked.
There are probably much faster ways to do this that do not require iterating over all pixels. You could try
groenpixelarea = sum(alltrue(a.reshape((-1,3)) == array([0,0,255]), axis=1))
This worked way faster, awesome.
Hope this helps,
Lutz
Thanks for all the help. -- Dewald Pieterse