我想计算出哪种颜色(bgr)在图像中表现得更多。
我知道我应该用:
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);
但是我如何读取这行中检测到的每种颜色的值(不进行比较)-我如何知道在整个图像中检测到的值?
谢谢。
如果你想知道整个图像中的主导颜色,那么一个更简单的方法就是通过嵌套循环遍历图像并汇总各个通道值。代码的一个示例可以是:
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。