Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Selected pixel count
#1
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
Reply
#2
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:

   
Reply
#3
(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
Reply
#4
(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.
Reply
#5
[quote pid='33676' dateline='1678629780']
Thanks Ofnuts
[/quote]
Reply


Forum Jump: