我正在努力学习equalization of histograms,当然我知道有histogram equalization in OpenCV。我iterating over the Mat
object返回calcHist
,我不知道这是否正确......或者还有其他方式。首先,calcHist
是否会返回浮点数或双打或整数?我似乎无法在文档中找到它。
int histSize = 256;
float range[] = {0, 256} ;
const float* histRange = { range };
Mat histogram;
calcHist(&image, 1, 0, Mat(), histogram, 1, &histSize, &histRange);
Mat accumulatedHistogram = histogram.clone();
MatIterator_<float> accHistIt, accHistEnd;
accHistIt=accumulatedHistogram.begin<float>();
accHistEnd=accumulatedHistogram.end<float>();
bool firstLoop = true;
for(; accHistIt != accHistEnd; accHistIt++) {
if(firstLoop) {
firstLoop = false;
} else {
*accHistIt += *(accHistIt-1);
}
}
谢谢,
答案 0 :(得分:1)
calcHist
将返回Mat
float
值。虽然类型没有详细记录,但您可以通过查看the documentation access its values的方式来轻松猜出它是什么。
如果image
是单通道图片,calcHist
将计算histSize x 1
float
矩阵,在您的示例中{{1} }。请注意,histogram
通常称为histSize
。
要迭代其所有值,您可以这样做:
number of bins
注意:对于for (int i=0; i<histSize; i++)
cout << histogram.at<float>(i, 0));
这样的3通道图像,您可以执行以下操作:
RGB