评估失败,尝试在C ++中创建直方图

时间:2015-10-17 04:25:03

标签: c++ opencv

这只是代码的一部分,但我知道错误就在这里。特别是这一行:

float y = hist.at<float>(0,i);

由于某种原因,我的直方图是0乘0。

所以实际错误可能来自我使用calcHist()函数的方式

void entropyImage(string filename) {
Mat YCbCrImage, hist , image = imread(filename, IMREAD_UNCHANGED);
float range[] = { 0, 256 };
const float* histRange = { range };
int histSize = 256;

if (image.channels() == 1){
    double H = 0;
    //GrayScale Image
    calcHist(&image, 1, 0, Mat(), hist, 1, &histSize, &histRange, true, false);

    for (int i = 0; i<histSize; i++){
        float y = hist.at<float>(0,i);
        cout << "symbol: " << i << "    was repeated: " << y << endl;
    }
}}

以下是我从main中调用函数的方法:

entropyImage("C:\\Users\\Documents\\Visual Studio 2013\\Projects\\lenagray.jpg");

可以在OpenCV中更有经验的人让我知道为什么我的CalcHist无法正常工作“

1 个答案:

答案 0 :(得分:0)

  • 通过声明像

    这样的数组来给出通道
    int channel[] = {0};
    

    calcHist(&image, 1, channel, Mat(), hist, 1, &histSize, &histRange, true, false);
    
  • 这可能会解决你的问题。