Я хочу рассчитать среднее и стандартное отклонения для гистограммы изображения HSV, но я хочу только сделать эту гистограмму и вычисления для V-канала.Вычисление среднего и стандартного отклонения в C++ для одноканальной гистограммы
Я читал примеры о том, как это сделать для набора каналов, и пробовал эти подходы, но я смущен тем, что мой подход к первоначальному созданию гистограммы правильный или нет только для одного канала, потому что программа поддерживает когда я пытаюсь выполнить его.
Вот что у меня есть на данный момент (переменная test - это изображение cv :: Mat, и это может быть любое изображение, которое вы хотите использовать для воссоздания проблемы). Я, вероятно, пропустил что-то очевидное, и цикл for может быть неправильным с точки зрения диапазона значений, но я еще не сделал этого на C++ раньше.
cv::cvtColor(test, test, CV_BGR2HSV);
int v_bins = 50;
int histSize[] = { v_bins };
cv::MatND hist;
float v_ranges[] = { 0, 255};
cv::vector<cv::Mat> channel(3);
split(test, channel);
const float* ranges[] = { v_ranges };
int channels[] = {0};
cv::calcHist(&channel[2], 1, channels, cv::Mat(), hist, 1, histSize, ranges, true, false); //histogram calculation
float mean=0;
float rows= hist.size().height;
float cols = hist.size().width;
for (int v = 0; v < v_bins; v++)
{
std::cout << hist.at<float>(v, v) << std::endl;;
mean = mean + hist.at<float>(v);
}
mean = mean/(rows*cols);
std::cout << mean<< std::endl;;
cv :: вектор канал (3); ?? –
sturkmen
Я думал, что это необходимо, потому что HSV разделен на 3 канала, и мне нужен только V-канал для гистограммы – bardsleyta
. Интересно, есть ли вектор cv :: vector? или std :: vector – sturkmen