我想计算 HSV 图像直方图的平均值和标准偏差,但我只想为 V 通道做这个直方图和计算。
我一直在阅读有关如何为一组通道执行此操作的示例,并尝试了这些方法,但我对我最初创建直方图的方法是否仅对一个通道正确感到困惑,因为程序在我尝试时不断崩溃执行它。
这是我目前所拥有的(变量 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; …Run Code Online (Sandbox Code Playgroud)