opencv直方图的bins中存储的是什么?
答案:2 悬赏:0 手机版
解决时间 2021-03-20 12:08
- 提问者网友:贪了杯
- 2021-03-19 20:34
opencv直方图的bins中存储的是什么?
最佳答案
- 五星知识达人网友:千杯敬自由
- 2021-03-19 21:40
假设 有数值 0,0,1,2,3,10,12,13 。你分的bins为 0-6 为第一个bin,7-13 为一个bins。那么bins[0] 即第一个bins 存储的数就是 4,原因是 0,0,1,2,3在第一个bin的范围内,bins[1] 存储的数为 3,原因是 10,12,13落在这个[7-13]这个bin内。
全部回答
- 1楼网友:深街酒徒
- 2021-03-19 22:04
可以生成 矩阵的直方图。
用法跟图片一样。
应为图片在opencv中,就是使用矩阵来存储的。
在opencv2.l 之后,已经彻底的从iplimage变成了 mat 矩阵对象。
以下是使用 图片生成直方图的例子。
把imread函数的地方改成 对函数
//使用 opencv 2.1
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main( int argc, char** argv )
{
mat hsv;
// 初始化
在此处加入代码, 初始化 hsv对象。
// 初始化
// let's quantize the hue to 30 levels
// and the saturation to 32 levels
int hbins = 30, sbins = 32;
int histsize[] = {hbins, sbins};
// hue varies from 0 to 179, see cvtcolor
float hranges[] = { 0, 180 };
// saturation varies from 0 (black-gray-white) to
// 255 (pure spectrum color)
float sranges[] = { 0, 256 };
const float* ranges[] = { hranges, sranges };
matnd hist;
// we compute the histogram from the 0-th and 1-st channels
int channels[] = {0, 1};
calchist( &hsv, 1, channels, mat(), // do not use mask
hist, 2, histsize, ranges,
true, // the histogram is uniform
false );
double maxval=0;
minmaxloc(hist, 0, &maxval, 0, 0);
int scale = 10;
mat histimg = mat::zeros(sbins*scale, hbins*10, cv_8uc3);
for( int h = 0; h < hbins; h++ )
for( int s = 0; s < sbins; s++ )
{
float binval = hist.at<float>(h, s);
int intensity = cvround(binval*255/maxvalue);
cvrectangle( histimg, point(h*scale, s*scale),
point( (h+1)*scale - 1, (s+1)*scale - 1),
scalar::all(intensity),
cv_filled );
}
namedwindow( "source", 1 );
imshow( "source", src );
namedwindow( "h-s histogram", 1 );
imshow( "h-s histogram", histimg );
waitkey();
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯