Gimp-Forum.net

Full Version: Selected pixel count
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,
Is there anyway to get the selected pixel count (as displayed in the histogram) into the clipboard, so I can use Autokeypad to put it into a spreadsheet?
Cheers
Open the python console and enter this:

Code:
image=image=[x for x in gimp.image_list() if image.ID==5][0]
Where you replace "5" by the image ID, which is the number you find in the title bar:

[attachment=9515]

Then to get your pixel count:

Code:
pdb.gimp_drawable_histogram(image.active_layer,0,0.,1.)[3]

If you want to redo this for another selection, just repeat that last line after changing the selection, since the image will be the same.

To be a bot more complete, in the histogram call, the args are:
  • The layer/drawable for which you want statistics
  • A channel identifier (Value (maxOf(R,G,B), Red, Green, Blue, Alpha, Luminance)
  • The minimum value you want inlcuded
  • The maximum value you want inlcuded (so you define a range between these two), like with the handles in the
  •  histogram display
The result is a list if numbers:
  • Average value
  • Standard deviation
  • Median value
  • Pixel count for the whole selection (range not taken in account)
  • Pixels count for the pixels within range
  • Ratio of the two previous values
So the code I gave you extracts the 4th value (index=3, since this is 0-based). The output of the API is in the [0..255] range instead of the [0. .. 1.0] range so you add a division by 255 if necessary.

It is of course also easy to format this output differently, and writing a script to write the values to file wouldn't be difficult.

Here is how the API and the GUI relate:

[attachment=9516]
(03-10-2023, 08:04 AM)Ofnuts Wrote: [ -> ]Open the python console and enter this:

Code:
image=image=[x for x in gimp.image_list() if image.ID==5][0]
Where you replace "5" by the image ID, which is the number you find in the title bar:



Then to get your pixel count:

Code:
pdb.gimp_drawable_histogram(image.active_layer,0,0.,1.)[3]

If you want to redo this for another selection, just repeat that last line after changing the selection, since the image will be the same.

To be a bot more complete, in the histogram call, the args are:
  • The layer/drawable for which you want statistics
  • A channel identifier (Value (maxOf(R,G,B), Red, Green, Blue, Alpha, Luminance)
  • The minimum value you want inlcuded
  • The maximum value you want inlcuded (so you define a range between these two), like with the handles in the
  •  histogram display
The result is a list if numbers:
  • Average value
  • Standard deviation
  • Median value
  • Pixel count for the whole selection (range not taken in account)
  • Pixels count for the pixels within range
  • Ratio of the two previous values
So the code I gave you extracts the 4th value (index=3, since this is 0-based). The output of the API is in the [0..255] range instead of the [0. .. 1.0] range so you add a division by 255 if necessary.

It is of course also easy to format this output differently, and writing a script to write the values to file wouldn't be difficult.

Here is how the API and the GUI relate:
Thanks For That Ofnuts.
I've got it to work, but not with
Code:
image=image=[x for x in gimp.image_list() if image.ID==5][0]
making sure the ID matches the Gimp Image number - i keep getting the error :-

Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'image' is not defined

 But I am only using one image, so I can just use
Code:
theImage = gimp.image_list()[0]
Also is there anyway I can get this number directly into the clipboard?
Cheers
Steven
(03-12-2023, 12:13 AM)steven Brazzale Wrote: [ -> ]Thanks For That Ofnuts.
I've got it to work, but not with
Code:
image=image=[x for x in gimp.image_list() if image.ID==5][0]
making sure the ID matches the Gimp Image number - i keep getting the error :-

Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'image' is not defined

 But I am only using one image, so I can just use
Code:
theImage = gimp.image_list()[0]
Also is there anyway I can get this number directly into the clipboard?
Cheers
Steven

1) Sorry, typo, only one image=:

Code:
image=[x for x in gimp.image_list() if image.ID==5][0]

2) Yes, you can hardcode gimp.image_list()[0] but you'll get burned sooner or later. Of course if you do a true plugin instead of pasting code in the Python console you get the image passed as a plugin parameter.

3) Possibly, but this is heavily system dependent. On Linux, there is a CLI utility to stuff things in the clipboard and it can be called from Python. I don't know if it is as simple in Windows (or even possible). But IMHO you could skip the clipboard and write directly in a file.
[quote pid='33676' dateline='1678629780']
Thanks Ofnuts
[/quote]