OpenCV中直方图的计算和绘制

主要记录一下几个关键的API:

cvRound(输入一个浮点数
);//返回一个整型数,取整的方法为四舍五入
split(输入多通道图像,数组或者vector变量。
);

计算直方图

calcHist(&分割后的单通道图像,输入数组的个数,需要统计的通道索引,Mat()掩码储存直方图的矩阵,直方图的维数,&每个维度的bin数,&每个维度的取值范围,true,false
);

归一化,将直方图bin中的值缩放到指定的范围:

normalize(输入数组,归一化后的输出数组,归一化范围的小值,归一化范围的大值,NORM_MINMAX归一化方法,-1,指示归一化后的输出数组与输入数组同类型,Mat()掩码
);

下面你是一个手敲的demo:

#include "opencv2/opencv.hpp"
#include <vector>using namespace std;
using namespace cv;int main(){Mat src = imread("/home/dynamicw/Project/C++_Project/opencvtest/src/lesson01/source/grass.jpg");imshow("src",src);vector<Mat> planes;split(src,planes);imshow("b",planes.at(0));imshow("g",planes.at(1));imshow("r",planes.at(2));int histSize = 255;float range[] = {0,255};const float* histRange = {range};Mat r_hist,g_hist,b_hist;calcHist(&planes[0],1,0,Mat(),r_hist,1,&histSize,&histRange,true,false);calcHist(&planes[1],1,0,Mat(),g_hist,1,&histSize,&histRange,true,false);calcHist(&planes[2],1,0,Mat(),b_hist,1,&histSize,&histRange,true,false);Mat histImage(400,400,CV_8UC3,Scalar(0,0,0));normalize(r_hist,r_hist,0,400,NORM_MINMAX,-1,Mat());normalize(g_hist,g_hist,0,400,NORM_MINMAX,-1,Mat());normalize(b_hist,b_hist,0,400,NORM_MINMAX,-1,Mat());int bin_w = cvRound((double)400/histSize);for(int i = 1;i < histSize;i++){line(histImage,Point(bin_w*(i-1),400-cvRound(r_hist.at<float>(i-1))),Point(bin_w*(i),cvRound(400-r_hist.at<float>(i))),Scalar(0,0,255),2,8);line(histImage,Point(bin_w*(i-1),400-cvRound(g_hist.at<float>(i-1))),Point(bin_w*(i),cvRound(400-g_hist.at<float>(i))),Scalar(0,255,0),2,8);line(histImage,Point(bin_w*(i-1),400-cvRound(b_hist.at<float>(i-1))),Point(bin_w*(i),cvRound(400-b_hist.at<float>(i))),Scalar(255,0,0),2,8);}imshow("hist",histImage);waitKey(0);return 0;
}

OpenCV中直方图的计算和绘制相关推荐

  1. 使用Python,Opencv进行二维直方图的计算及绘制

    使用Python,Opencv进行二维直方图的计算及绘制 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python,Opencv进行二维直方图的计算及绘制(分别用Opencv和Numpy计算 ...

  2. OpenCV学习笔记(八)——直方图的计算与绘制(cv.calcHist()、plt.hist()、plt.imshow())

    目录 1 直方图的计算 2 直方图的绘制 2.1 cv.line()和cv.polylines() 2.2 plt.hist() 3 2D 直方图 3.1 cv.calcHist() 3.2 plt. ...

  3. 《OpenCV3编程入门》学习笔记9 直方图与匹配(一二) 图像直方图概述直方图的计算与绘制

    第9章 直方图与匹配 9.1 图像直方图(Histogram)概述 1.作用:   在每个兴趣点设置一个有相近特征的直方图所构成的标签,通过标记帧与帧之间显著的边缘.颜色.角度等特征的统计变化,来检测 ...

  4. 直方图的计算,绘制与分析

    直方图的计算,绘制与分析 目标 • 使用 OpenCV 或 Numpy 函数计算直方图 • 使用 Opencv 或者 Matplotlib 函数绘制直方图 • 将要学习的函数有:cv2.calcHis ...

  5. opencv中直方图操作

    直方图 1 灰度直方图 1.1 原理 直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的 bin 当中.其中, bin为直方图中经常用到的一个概念,可以译为"直条&quo ...

  6. OpenCV中直方图反向投影算法详解与实现

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自:opencv学堂 一:直方图交叉 OpenCV中直方图反向 ...

  7. OpenCV中直方图对比

    OpenCV中直方图对比 对于两幅图片先求得其直方图然后在对两个直方图进行比较.而两幅直方图相似度的标准为d(H1,H2)\color{#f00}d(H1,H2)d(H1,H2),而对于该值的计算有四 ...

  8. OpenCV中直方图均衡化

    OpenCV中直方图均衡化 首先知道直方图是个什么鬼?在一幅图像中,直方图所体现的是每个像素值在所有的像素中所占的比例:例值为127的像素点的个数/图像总的像素点的个数\color{#f00}值为12 ...

  9. Opencv中直方图函数calcHist

    Opencv中直方图函数calcHist calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解 ...

最新文章

  1. TCP与UDP之间的区别
  2. 数据结构和算法分析: 红黑树
  3. 看动画学算法系列之:后缀数组suffix array
  4. 利用python爬虫(案例2)--X凰的一天
  5. 2014值得期待的Erlang两本新书
  6. UpdatePanel的内容中出现自定义多语言运行异常
  7. SpringBoot页面出现 Whitelabel Error Page
  8. HTML新增便签source语义,互联网的原理,常用标签,标签分类,HTML杂项,CSS
  9. 读吴恩达算-EM算法笔记
  10. linux bash脚本 坑,向大家分享一个shell脚本的坑
  11. Vue uniapp省份城市列表选择、省市选择
  12. 开机动画适配方案_修改开机动画教程
  13. ElasticSearch系列十:ElasticSearch搜索技术深入讲解之搜索模板,搜索建议和地理位置搜索
  14. 计算机组老师颁奖词,优秀教研团队颁奖词
  15. JS 网页打印解决方案
  16. easyExcel导出数据并设置单元格下拉数据
  17. 英国《新科学家》杂志:研究显示人们上假新闻的当可能是因懒得思考
  18. cstring转int(long转CString)
  19. 【Linux系统编程】守护进程、线程
  20. python获取SSL证书信息

热门文章

  1. 笔记本电脑怎么清理灰尘_笔记本发热怎么办?这里有解决方案
  2. oracle 创建用户表空间及赋权
  3. 【软件测试】黑盒测试の场景测试法
  4. 【C语言】第四章 逻辑判断与选择结构 题解
  5. 【Python】Matplotlib绘制正余弦曲面图
  6. 互逆的压缩与解压(洛谷P1319、P1320题题解,Java语言描述)
  7. 图书ISBN号码检验(洛谷P1055题题解,Java语言描述)
  8. 【VB.NET】VB.NET数据库技术问题的解答
  9. 【记录一个问题】linux+opencv+cuvid解码1080P视频,当使用CUDA核函数的时候,必然崩溃...
  10. Vue cli3+Hubuilder将项目打包为App