Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find the Dominant color in image?

Tags:

i want to find the dominant color in image, how can i do it ?

it would be great if i can get this in HEX code (exm: #eeeeee)

like image 928
motioz Avatar asked Jan 04 '12 16:01

motioz


People also ask

Which is the dominant color?

Dominant color is achieved when one color serves as the focal point in a photo. The color expresses more intensity among other colors in the picture. This type of photo tends to instantly catch the attention of the viewer.

How do you analyze color in an image?

To analyze colors in a reference image, you can use Adobe Color CC to see its color palette. Import a reference picture into Adobe Color CC, or use the Select Color Adjustment Layer in Photoshop to create a Saturation Map. This allows you to see the concentration of colors in that image.


2 Answers

To find the most "dominant" color in an image, meaning the color that is most prevalent in the image: you'd need to create a histogram of the image.

Here is an the code from this article on how to create a histogram in PHP. (Website has gone off line several times)

<?php $source_file = "test_image.jpg";  // histogram options  $maxheight = 300; $barwidth = 2;  $im = ImageCreateFromJpeg($source_file);  $imgw = imagesx($im); $imgh = imagesy($im);  // n = total number or pixels  $n = $imgw*$imgh;  $histo = array();  for ($i=0; $i<$imgw; $i++) {         for ($j=0; $j<$imgh; $j++)         {                  // get the rgb value for current pixel                  $rgb = ImageColorAt($im, $i, $j);                  // extract each value for r, g, b                  $r = ($rgb >> 16) & 0xFF;                 $g = ($rgb >> 8) & 0xFF;                 $b = $rgb & 0xFF;                  // get the Value from the RGB value                  $V = round(($r + $g + $b) / 3);                  // add the point to the histogram                  $histo[$V] += $V / $n;          } }  // find the maximum in the histogram in order to display a normated graph  $max = 0; for ($i=0; $i<255; $i++) {         if ($histo[$i] > $max)         {                 $max = $histo[$i];         } }  echo "<div style='width: ".(256*$barwidth)."px; border: 1px solid'>"; for ($i=0; $i<255; $i++) {         $val += $histo[$i];          $h = ( $histo[$i]/$max )*$maxheight;          echo "<img src=\"img.gif\" width=\"".$barwidth."\" height=\"".$h."\" border=\"0\">"; } echo "</div>"; ?>  

In that example $max is your most "dominant" color.

like image 81
tkone Avatar answered Oct 01 '22 08:10

tkone


There is a PHP class developed that handles this, named color extract. However, know that doing this on the server side will require substantial system resources. You may wish to instead do this with canvas.

like image 23
Zachary Schuessler Avatar answered Oct 01 '22 07:10

Zachary Schuessler