迭代由calcHist返回的Mat

时间:2014-02-14 16:46:22

标签: c++ opencv

我正在努力学习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);
    }
}

谢谢,

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