Tôi muốn tìm màu chủ đạo trên hình ảnh. Đối với điều này, tôi biết rằng tôi nên sử dụng biểu đồ hình ảnh. Nhưng tôi không chắc chắn về định dạng hình ảnh. Bạn nên sử dụng hình ảnh rgb, hsv hoặc xám nào?Tìm màu chủ đạo trên hình ảnh
Sau khi biểu đồ được tính toán, tôi nên tìm giá trị tối đa trên biểu đồ. Đối với điều này, tôi có nên tìm giá trị binVal tối đa bên dưới cho hình ảnh hsv không? Tại sao hình ảnh kết quả của tôi chỉ chứa màu đen?
float binVal = hist.at<float>(h, s);
EDIT:
Tôi đã thử đoạn code dưới đây. Tôi vẽ biểu đồ h-s. Và hình ảnh kết quả của tôi ở đây. Tôi không tìm thấy gì sau ngưỡng nhị phân. Có lẽ tôi tìm thấy giá trị biểu đồ tối đa không chính xác.
cvtColor(src, hsv, CV_BGR2HSV);
// Quantize the hue to 30 levels
// and the saturation to 32 levels
int hbins = 20, sbins = 22;
int histSize[] = {hbins, sbins};
// hue varies from 0 to 179, see cvtColor
float hranges[] = { 0, 180 };
// saturation varies from 0 (black-gray-white) to
// 255 (pure spectrum color)
float sranges[] = { 0, 256 };
const float* ranges[] = { hranges, sranges };
MatND hist;
// we compute the histogram from the 0-th and 1-st channels
int channels[] = {0, 1};
calcHist(&hsv, 1, channels, Mat(), // do not use mask
hist, 2, histSize, ranges,
true, // the histogram is uniform
false);
double maxVal=0;
minMaxLoc(hist, 0, &maxVal, 0, 0);
int scale = 10;
Mat histImg = Mat::zeros(sbins*scale, hbins*10, CV_8UC3);
int maxIntensity = -100;
for(int h = 0; h < hbins; h++) {
for(int s = 0; s < sbins; s++)
{
float binVal = hist.at<float>(h, s);
int intensity = cvRound(binVal*255/maxVal);
rectangle(histImg, Point(h*scale, s*scale),
Point((h+1)*scale - 1, (s+1)*scale - 1),
Scalar::all(intensity),
CV_FILLED);
if(intensity > maxIntensity)
maxIntensity = intensity;
}
}
std::cout << "max Intensity " << maxVal << std::endl;
Mat dst;
cv::threshold(src, dst, maxIntensity, 255, cv::THRESH_BINARY);
namedWindow("Dest", 1);
imshow("Dest", dst);
namedWindow("Source", 1);
imshow("Source", src);
namedWindow("H-S Histogram", 1);
imshow("H-S Histogram", histImg);
Bạn có phiền khi đăng một số mã không? cảm ơn –