سلام.
از تصویر هیستوگرام 3 بعدی بگیرید البته با تعداد بین های کمتر و سپس نقطه ماکزیمم را توی هیستوگرام 3 بعدی پیدا کنید میشه رنگی که بیشترین فرکانس را داره.
cv::Scalar getDominantColor(cv::InputArray _src, int quantize_bins = 8) {
cv::Mat src = _src.getMat();
float hRange[] = { 0, 255 };
const float* etendu[] = { hRange, hRange,hRange };
float scale = 256.f / quantize_bins;
int tailleHist[] = { quantize_bins, quantize_bins, quantize_bins };
int canaux[] = { 0, 1,2 };
double hMin, hMax;
cv::SparseMat histogramme;
cv::Mat resultMap;
cv::calcHist(&src, 1, canaux, cv::Mat(), histogramme, 3, tailleHist, etendu, true, false);
int max_pos[3];
cv::minMaxLoc(histogramme,0, &hMax, 0, max_pos);
return cv::Scalar(max_pos[0] * scale, max_pos[1] * scale, max_pos[2] * scale);
}