【发布时间】:2016-04-21 20:34:44
【问题描述】:
我要做的是编写一个函数,该函数计算灰度图像的直方图,其中直方图范围被划分为转发的箱数 (anzBin)。然后我正在运行图像像素,比较它们值到不同的 Bins,如果值适合,则将 Bin 的值增加 1
vector<int> calcuHisto(const IplImage *src_pic, int anzBin)
{
CvSize size = cvGetSize(src_pic);
int binSize = (size.width / 256)*anzBin;
vector<int> histogram(anzBin,0);
for (int y = 0; y<size.height; y++)
{
const uchar *src_pic_point =
(uchar *)(src_pic->imageData + y*src_pic->widthStep);
for (int x = 0; x<size.width; x++)
{
for (int z = 0; z < anzBin; z++)
{
if (src_pic_point[x] <= z*binSize)
{
histogram[src_pic_point[x]]++;
}
}
}
}
return histogram;
}
但不幸的是它不起作用...... 这里有什么问题? 请帮忙
【问题讨论】:
-
int binSize = (size.width / 256)*anzBin;binSize0 这里是因为整数数学吗?我的意思是如果 size.width 小于 256,binSize不会是 0? -
这不是我想要计算的,你是对的。我的目标是这样的: binSize = (Image()/256)*anzBin 但我该怎么做呢?
-
将 256 替换为 256.0
-
哦,我讨厌我自己......这将解决 binSize 问题,但我仍然有向量直方图的问题
-
你能举一个小例子和想要的结果吗?
标签: c++ function opencv image-processing histogram