[Numpy-discussion] Counting the Colors of RGB-Image

Chris Barker chris.barker at noaa.gov
Tue Jan 17 15:20:37 EST 2012

```Here's a thought:

Too bad numpy doesn't have a 24 bit integer, but you could tack a 0
on, making your image 32 bit, then use histogram2d to count the
colors.

something like (untested):

# create the 32 bit image
32bit_im = np.zeros((w, h), dtype = np.uint32)
view = 32bit_im.view(dtype = np.uint8).reshape((w,h,4))
view[:,:,:3] = im

# histogram it:
bins = # this is the trick -- setting your bins right
# remember that histrogram is designed for floats, so
you're bin boundaries shold be between the inteer values you want.

colors = np.histogram(32bit_im, bins=bins)

NOTE: the image processing scikit may well have somethign already --
histogramming an image is a common process.

-Chris

On Sun, Jan 15, 2012 at 9:40 AM, Nadav Horesh <nadavh at visionsense.com> wrote:
> im_flat = im0[...,0]*65536 + im[...,1]*256 +im[...,2]
> colours = np.unique(im_flat)
>
>
> ________________________________
> From: numpy-discussion-bounces at scipy.org
> [numpy-discussion-bounces at scipy.org] On Behalf Of Tony Yu [tsyu80 at gmail.com]
> Sent: 15 January 2012 18:03
> To: Discussion of Numerical Python
> Subject: Re: [Numpy-discussion] Counting the Colors of RGB-Image
>
>
>
> On Sun, Jan 15, 2012 at 10:45 AM, <apo at pdauf.de> wrote:
>>
>>
>> Counting the Colors of RGB-Image,
>> nameit im0 with im0.shape = 2500,3500,3
>> with this code:
>>
>> tab0 = zeros( (256,256,256) , dtype=int)
>> tt = im0.view()
>> tt.shape = -1,3
>> for r,g,b in tt:
>>  tab0[r,g,b] += 1
>>
>> Question:
>>
>> Is there a faster way in numpy to get this result?
>>
>>
>> MfG elodw
>
>
> Assuming that your image is made up of integer values (which I guess they'd
> have to be if you're indexing into `tab0`), then you could write:
>
>>>> rgb_unique = set(tuple(rgb) for rgb in tt)
>
> I'm not sure if it's any faster than your loop, but I would assume it is.
>
> -Tony
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>

--
--

Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris.Barker at noaa.gov

```