[Numpy-discussion] Count occurrences in a nested ndarray

Dewald Pieterse dewald.pieterse@gmail....
Tue Oct 19 20:09:39 CDT 2010


Hi All

I have a nested array created using:

edges = scipy.misc.pilutil.imfilter(prent,'find_edges')

edges
array([[[  0, 255,   0],
        [  0, 255,   0],
        [  0, 255,   0],
        ...,
        [  0, 255,   0],
        [  0, 255,   0],
        [  0, 255,   0]],

       [[  0, 255,   0],
        [  0,   0,   0],
        [  0,   0,   0],
        ...,
        [  0,   0,   0],
        [  0,   0,   0],
        [  0, 255,   0]],

       [[  0, 255,   0],
        [  0,   0,   0],
        [  0,   0,   0],
        ...,
        [  0,   0,   0],
        [  0,   0,   0],
        [  0, 255,   0]],

       ...,
       [[  0, 255,   0],
        [  0,   0,   0],
        [  0,   0,   0],
        ...,
        [  0,   0,   0],
        [  0,   0,   0],
        [  0, 255,   0]],

       [[  0, 255,   0],
        [  0,   0,   0],
        [  0,   0,   0],
        ...,
        [  0,   0,   0],
        [  0,   0,   0],
        [  0, 255,   0]],

       [[  0, 255,   0],
        [  0, 255,   0],
        [  0, 255,   0],
        ...,
        [  0, 255,   0],
        [  0, 255,   0],
        [  0, 255,   0]]], dtype=uint8)

I want to count the number of occurrences of certain unique elements in the
array, I know what the elements are that I want to count [0,255,0],
[255,0,0] and [0,0,255].
I want to count the number of pixels of a particular color in a picture to
determine the edge length and calculate areas and such.
array does not have a array.count() method and trying to count the instances
using a nested for loop like:

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>


What am I doing wrong?

Thanx

-- 
Dewald Pieterse
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/numpy-discussion/attachments/20101020/438db8ac/attachment.html 


More information about the NumPy-Discussion mailing list