永发信息网

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(); }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯