【opencv学习笔记】025之直方图计算 - calcHist函数详解
前言
如果你想了解更多有关于计算机视觉、OpenCV、机器学习、深度学习等相关技术的内容,想与更多大佬一起沟通,那就扫描下方二维码加入我们吧!
1、calcHist函数是干什么滴?
这个问题嘛,看看标题,标题,对啊,你这么聪明,一定猜得到:
calcHist函数是用来计算图像直方图的。
2、calcHist函数调用形式
C++: void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=false )
参数详解:
onst Mat* images:输入图像
int nimages:输入图像的个数
const int* channels:需要统计直方图的第几通道
InputArray mask:掩膜,,计算掩膜内的直方图 ...Mat()
OutputArray hist:输出的直方图数组
int dims:需要统计直方图通道的个数
const int* histSize:指的是直方图分成多少个区间,就是 bin的个数
const float** ranges: 统计像素值得区间
bool uniform=true::是否对得到的直方图数组进行归一化处理
bool accumulate=false:在多个图像时,是否累计计算像素值得个数
3、实战分析及代码展示
我们需要把下面这个图像的直方图计算并画在画布上。一共有如下几个步骤:
1.创建一些矩阵;
2.加载原图像;
3.使用OpenCV函数 split() 将图像分割成3个单通道图像;
4.设定像素取值范围,我们知道像素值的范围是 [0,255];
5.使用OpenCV函数calcHist() 分别计算三个通道的直方图;
6.创建显示直方图的画布并使用 normalize() 函数归一化直方图;
7.最后显示直方图并等待用户退出程序;
#define INPUT_TITLE "input image"
#define OUTPUT_TITLE "直方图计算"#include<iostream>
#include<opencv2\opencv.hpp>using namespace std;
using namespace cv;int main() {Mat src, dst;//加载图像src = imread("D:/equalizeHist.jpg");if (!src.data){cout << "ERROR : could not load image.";return -1;}namedWindow(INPUT_TITLE, CV_WINDOW_AUTOSIZE);namedWindow(OUTPUT_TITLE, CV_WINDOW_AUTOSIZE);imshow(INPUT_TITLE, src);//分通道显示vector<Mat> bgr_planes;split(src, bgr_planes);//设定像素取值范围int histSize = 256;float range[] = { 0,256 };const float *histRanges = { range };//三个通道分别计算直方图Mat b_hist, g_hist, r_hist;calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRanges, true, false);calcHist(&bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRanges, true, false);calcHist(&bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRanges, true, false);//创建直方图画布并归一化处理int hist_h = 400;int hist_w = 512;int bin_w = hist_w / histSize;Mat histImage(hist_w, hist_h, CV_8UC3, Scalar(0, 0, 0));normalize(b_hist, b_hist, 0, hist_h, NORM_MINMAX, -1, Mat());normalize(g_hist, g_hist, 0, hist_h, NORM_MINMAX, -1, Mat());normalize(r_hist, r_hist, 0, hist_h, NORM_MINMAX, -1, Mat());//render histogram chart 在直方图画布上画出直方图for (int i = 0; i < histSize; i++){line(histImage, Point((i - 1)*bin_w, hist_h - cvRound(b_hist.at<float>(i - 1))), Point((i)*bin_w, hist_h - cvRound(b_hist.at<float>(i))), Scalar(255, 0, 0), 2, LINE_AA);line(histImage, Point((i - 1)*bin_w, hist_h - cvRound(g_hist.at<float>(i - 1))),Point((i)*bin_w, hist_h - cvRound(g_hist.at<float>(i))), Scalar(0, 255, 0), 2, LINE_AA);line(histImage, Point((i - 1)*bin_w, hist_h - cvRound(r_hist.at<float>(i - 1))),Point((i)*bin_w, hist_h - cvRound(r_hist.at<float>(i))), Scalar(0, 0, 255), 2, LINE_AA);}imshow(OUTPUT_TITLE, histImage);waitKey(0);return 0;
}
【opencv学习笔记】025之直方图计算 - calcHist函数详解相关推荐
- OpenCV-Python直方图计算calcHist函数详解
☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░ 一.引言 在<<数字图像处理>第三章学习总结感悟2:直方图处理: h ...
- OpenCV-Python图像直方图计算calcHist函数详解、示例及图形呈现
☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░ 一.引言 在前面几篇直方图相关的文章中介绍了直方图均衡.直方图匹配.局部直方图处理.基 ...
- 【小白】Open-CV 学习笔记 -5.5.2 离散傅里叶变换相关函数详解
目录 1.dft()函数 2.返回DFT最优尺寸大小:getOptimalDFTSize()函数 3.扩充图像边界:copyMakeBorder()函数 4.计算二维矢量的幅值:magnitude() ...
- OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十
OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...
- OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC
OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...
- python列表和元组的应用_python学习笔记之列表(list)与元组(tuple)详解
前言 最近重新再看python的基础知识,感觉自己还是对于这些知识很陌生,需要用的时候还是需要翻书查阅,还是先注重基础吧--我要重新把python的教程阅读一遍,把以前自己忽略的部分学习,加强练习和记 ...
- 【matcovnet学习笔记】objective,top1error,top5error详解
[matcovnet学习笔记]objective,top1error,top5error详解 排名前1和前5的错误率是衡量某些解决方案成功与否的重要单位 ,要理解这三个概念,关键是要看懂下面这个多类误 ...
- Ext.Net学习笔记22:Ext.Net Tree 用法详解
上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...
- 【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器
本文属于[Azure 架构师学习笔记]系列. 本文属于[Azure Data Factory]系列. 接上文[Azure 架构师学习笔记]-Azure Data Factory (3)-触发器详解-翻 ...
最新文章
- 5月26 留言板练习题
- 合并分支到master_我敢打赌!这是全网最全的 Git 分支开发规范手册
- 2021牛客多校2 - WeChat Walk(分块)
- Flex与javascript通信
- myeclipse搭建SSH框架
- 功放音量调节原理_汽车音响知识关于功放和低音喇叭的匹配
- 转载:word排版之长英文单词自动换行
- .net async/await 异步等待的数种情况
- mysql 保存 union_mysql中union 查询
- 计算机网络arp表作用,arp映射表是什么?有什么作用
- DWL文件能改成DWG文件打开吗?
- 了解 Web 服务规范: 第 7 部分:Web 服务业务流程执行语言
- python—最大公约数和最小公倍数
- idea如何设置jvm大小
- P330工作站装linux,联想ThinkStation P330工作站装win7系统及bios设置教程(支持usb)
- SAP采购中基于收货的发票校验应用逻辑及控制
- kotlin——观察者模式
- 读real time localization and 3D reconstruction笔记
- 扭转战局的棋子 安卓4.4 ART模式实测解析
- 伪元素(3)-解决IE6/IE7/IE8不支持before,after问题
热门文章
- 第十五天 12-tcpdump检测流量工具
- npy文件的打开,读取
- Python Resource
- java swing实现图文混排_跟我学Java Swing之游戏设计(4)
- C语言中 sqrt(); 函数的最全用法总结,最全!!!
- day75,爬虫02,webmagic入门程序,组件介绍:Downloader,PageProcess,pipeline,Scheduler,51jop招聘网站综合案例
- floor()函数的使用
- python地产成本_Python3抓取 深圳房地产均价数据,通过真实数据为购置不动产做决策分析(二)...
- Linux防火墙的关闭
- JNLP文件详细说明