10

The goal is to lay a caption on top of an image and set the text colour to one that will contrast with the background it is positioned on top of. To that end, I wish to calculate the average colour of the area inside the red rectangles in the following images:

enter image description here

enter image description here

Zombo
  • 1
  • 62
  • 391
  • 407
waigani
  • 3,570
  • 5
  • 46
  • 71

3 Answers3

13

Expanding on Bonzo’s answer. This is an example command

convert Y82IirS.jpg -resize 1x1 txt:

Result

# ImageMagick pixel enumeration: 1,1,255,srgb
0,0: (220,176, 44)  #DCB02C  srgb(220,176,44)

Average colour of an image

Zombo
  • 1
  • 62
  • 391
  • 407
5

I would crop to the area you are interested in then resize it to 1 pixel. Then get the value of that pixel.

Bonzo
  • 5,169
  • 1
  • 19
  • 27
1

Here is a command that handles both cropping and color detection, and also produces output in a consistent R,G,B format:

 convert image.gif -crop 6x7+8+9 -resize 1x1\! -format "%[fx:int(255*r+.5)],%[fx:int(255*g+.5)],%[fx:int(255*b+.5)]" info:-

where, in 6x7+8+9 :

 6: image width (pixels)
 7: image height (pixels)
 8: x-coordinate of top left corner
 9: y-coordinate of top left corner

Returns

 176,191,67

Adapted from https://stackoverflow.com/a/25488429/3124680

Community
  • 1
  • 1
stuart
  • 1,785
  • 2
  • 26
  • 38