中易网

opencv的直方图问题

答案:1  悬赏:80  
解决时间 2021-02-18 08:16
可以不利用图片进行计算么? 比如利用矩阵数据作直方图运算? 如果可以那该如何操作呢。。不懂。。真心求教。。
最佳答案
可以生成 矩阵的直方图。
用法跟图片一样。

应为图片在OpenCV中,就是使用矩阵来存储的。

在OpenCV2.l 之后,已经彻底的从IplImage变成了 Mat 矩阵对象。

以下是使用 图片生成直方图的例子。
把imread函数的地方改成 对函数
//使用 OpenCV 2.1
#include
#include

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(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();
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
病人的自理能力如何判定
树莓派上用什么编程
盂县二中南门地址在哪,我要去那里办事
皇上有没有爱过甄嬛
迅雷VIP1,怎么升级到VIP2?
我要进京东商城卖玉器,古董要怎么才能卖
虞这个字念什么??
灰色加什么颜色变紫色
全球国际货运代理(中国)有限公司常州联络处地
银魂中的中岛未华子出现在第几级?
邮电学院邮政代办所我想知道这个在什么地方
微信小号把钱吞了
solidworks的直径标注怎么出现英文字母了
金胡椒泰国料理来福士餐厅在哪里啊,我有事要
这是什么野菜?书名叫什么?可以吃,口感很滑
推荐资讯
三星A7108拆机视频
北京购房资格怎么查询
蓝色外套,红白针织衫,蓝色牛仔裤配黑色板鞋
许榕真的爸爸叫什么
数控凯恩帝1000m编制2.5螺纹刚性攻丝怎么编?
锦星干洗水洗连锁长宁店地址有知道的么?有点
1974年9月24日是什么命
三申人不足是什么意思?
动画片夏洛特第八级4分50秒里那个mv歌曲叫什
有一首古诗词,里面有良人,兮的,是什么
“生日求河图”啥意思啊- -
移动流量大王卡怎么激活
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?