Анализ цвета изображения OpenCV

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

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

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

Решение

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

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

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

0

Другие решения

Других решений пока нет …