2016-06-30 2 views
0

Я хочу рассчитать, какой цвет (bgr) представляет больше на изображении.OpenCV image color analysisis

Я знаю, что я должен использовать:

calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate); 
calcHist(&bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate); 
calcHist(&bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate); 

Но как я прочитал значение каждого цвета, обнаруженный в этой линии (без сравнения) - как я знаю значение обнаруженного во всем изображении?

спасибо.

+0

Посмотрите [здесь] (http://stackoverflow.com/a/35482205/5008845), в частности раздел _ «Получите разные цвета изображения» _, а также функцию 'getPalette' – Miki

ответ

0

Если вы хотите знать доминирующий цвет во всем изображении, более простым методом было бы просто просмотреть изображение с помощью вложенного цикла и суммировать значения отдельных каналов. Пример кода МОЖЕТ выглядеть следующим образом:

float blue_sum = 0; 
float green_sum = 0; 
float red_sum = 0; 
for(unsigned int y = 0; y < your_image_mat.rows; y++) 
    for(unsigned int x = 0; x < your_image_mat.cols; x++) 
    { 
    blue_sum += (float)your_image_mat.at<cv::Vec3b>(y, x)[0]; 
    green_sum += (float)your_image_mat.at<cv::Vec3b>(y, x)[1]; 
    red_sum += (float)your_image_mat.at<cv::Vec3b>(y, x)[2]; 
    } 
//Then just compare which of the sum values is largest 

Я не слишком уверен, что ваш тип Мэт, я предполагаю, что это аа довольно стандартный RGB Mat, вы, возможно, придется немного Твик код для работы с любым Матом, который вы используете.

+0

Это ** не будет ** давать вам самый настоящий цвет, а просто указание на который является наиболее часто используемым каналом, что здесь не полезно. Например, изображение, состоящее только из чистого красного и зеленого цвета, скажет вам, что самый настоящий цвет - желтый. Это в основном то же самое, что выбрать цвет _mean_ изображения и взять самый высокий канал – Miki

+0

@Miki Ah yes, woops. Немного провала мысли, то, что я описал, на самом деле для поиска наиболее доминирующего канала, как вы сказали. Когда я писал ответ, у меня была такая идея «доминирующего канала» в моей голове так крепко, что я не перечитывал вопрос. Простите за это. – ZoSal