这只是代码的一部分,但我知道错误就在这里。特别是这一行:
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无法正常工作“
答案 0 :(得分:0)
通过声明像
这样的数组来给出通道int channel[] = {0};
和
calcHist(&image, 1, channel, Mat(), hist, 1, &histSize, &histRange, true, false);
这可能会解决你的问题。