上篇博文(https://blog.csdn.net/lehuoziyuan/article/details/84064822)介绍了灰度直方图的计算,是一维的直方图,这篇博文介绍运用calcHist计算二维联合直方图的方法。以HSV空间的H-S的二维联合直方图为例。
需要说明的是,二维直方图并不是一个通道一个通道的分别独立平行计算,而是将两个通道的数据整合起来计算出的二维直方图。
calcHist函数就不介绍了,上一篇帖子已经讲进了,详情见我的上篇博客!
直接上源码吧!
源码中使用的图像下载链接:http://pan.baidu.com/s/1jHHh7sM 密码:78cr

图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注!

//opencv版本:OpenCV3.0
//VS版本:VS2013
//Author:qxsf321.net#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>#include <iostream>using namespace cv;
using namespace std;int main()
{Mat srcImage = imread("linger.jpg");imshow("【原图】", srcImage);Mat hsvImage;//因为要计算H-S的直方图,所以需要得到一个HSV空间的图像  cvtColor(srcImage, hsvImage, CV_BGR2HSV);//imshow("【HSV空间的原图】", hsvImage);//为计算直方图配置变量  //首先是需要计算的通道编号,就是需要计算哪个通道的直方图(BGR空间需要确定计算,计算方法见帖子中对相关参数的说明)int channels[] = { 0, 1 };//然后是定义直方图计算结果的存储空间Mat dstHist;//接下来是直方图的每一个维度的数目(这个数目用于将每一维度的数值分组) int histSize[] = { 30, 32 };//最后是确定每个维度的取值范围,就是每一维度的横坐标的取值范围  //首先得定义两个数组用来存储两个维度的取值范围float HRanges[] = { 0, 180 };float SRanges[] = { 0, 256 };//然后把这两个数组再放到一个二维数组中const float *ranges[] = { HRanges, SRanges };//准备工作做好后,就可以调用calcHis函数计算直方图数据了calcHist(&hsvImage, 1, channels, Mat(), dstHist, 2, histSize, ranges, true, false);//calcHist函数调用结束后,dstHist变量中将储存直方图数据 ///接下来绘制直方图//首先先创建一个黑底的图像,为了可以显示彩色,所以该绘制图像是一个8位的3通道图像  Mat drawImage = Mat::zeros(Size(300, 320), CV_8UC3);//因为数据矩阵中的某个值的总个数可能会超出所定义的图像的尺寸,所以要对个数进行归一化处理  //先用 minMaxLoc函数来得到计算直方图中的最大数据,这个函数的使用方法大家一看函数原型便知double g_dHistMaxValue;minMaxLoc(dstHist, 0, &g_dHistMaxValue, 0, 0);//遍历直方图数据,对数据进行归一化和绘图处理 for (int i = 0; i < 30; i++){for (int j = 0; j < 32; j++){int value = cvRound(dstHist.at<float>(i, j) * 256 / g_dHistMaxValue);rectangle(drawImage, Point(10 * i, j * 10), Point((i + 1) * 10 - 1, (j + 1) * 10 - 1), Scalar(value), -1);}}imshow("【H-S二维联合直方图】", drawImage);waitKey(0);return 0;
}

代码说明:
rectangle的两个point参数分别为一个矩阵的左上角顶点坐标和右下角顶点坐标!
运行结果截图如下:

0015-OpenCV环境下计算并绘制HSV空间的H-S的二维联合直方图相关推荐

  1. 在OpenCV环境下写的灰度图像二维傅里叶换,幅值计算,频谱平移和将数值归一化到0到255区间的四个函数

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 灰度图像的二维傅里叶变换(cv_gray_fft ...

  2. 在MATLAB和OpenCV环境下写的灰度图像分段线性变换源码

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 分段线性变换的理论基础这里我就不多打字了,如有需 ...

  3. 在OpenCV环境下对图像做Gamma校正

    什么是Gamma校正? Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系. 上面中的指数γ即为Gamma. 经过Gamma校正后的输入和输出图像灰度值关系如 ...

  4. opencv,图像处理,rgb转换为hsv空间

    转载: https://blog.csdn.net/dajiyi1998/article/details/60606094?utm_source=blogxgwz4 图像RGB空间转换为HSV空间. ...

  5. JavaCV进阶opencv图像处理:10行代码快速实现扫描识别图片中的二维码

    人脸检测识别 javacv进阶opencv图像检测/识别系列目录 人脸检测识别 JavaCV进阶opencv图像处理:摄像头图像人脸检测 JavaCV进阶opencv图像处理:ffmpeg视频图像画面 ...

  6. OpenCV打开摄像头,RGB转HSV空间

    文章目录 前言 一.使用OpenCV打开摄像头 二.使用OpenCV进行图像预处理 前言 有段时间没有更新了,最近主要在忙一个项目,用到了OpenCV,故想把一些常用代码在这里备份一下,一起学习. 环 ...

  7. VMX虚拟机环境下CentOS/Linux扩展磁盘空间,并且增加HOME目录的大小!

    转载+修改: tip: 以sda3增加home分区的大小为例.其他类推.通过调节逻辑分区来增加磁盘对应分区的大小的. 1.  Vm虚拟机下Linux扩展原有磁盘空间,详细步骤如下: 注意:linux只 ...

  8. VMX虚拟机环境下CentOS扩展home磁盘空间

      1.  Vm虚拟机下Linux扩展原有磁盘空间,详细步骤如下: 注意:linux只能扩展磁盘容量而不能减小, 所填写的容量为总容量,即包含已分区的磁盘,扩展容量时不能有快照哟,大家可以先把快照删除 ...

  9. matlab绘制同心柱体,同心圆柱网格的二维画法

    上一篇介绍了四分之一同心圆柱网格的画法,得到网格的分辨率大概是0.4mm,远远达不到DNS的标准,但是网格数量已经有21万,再加上详细的化学反应机理,一般的PC根本跑不动,不适合初期的算例调试,所以今 ...

最新文章

  1. phpstudy+dvwa搭建
  2. 谷歌guava_Google Guava MultiMaps
  3. 广州大学专业选修课介绍-----------Linux操作系统分析及实践
  4. 头部外伤指什么_什么是颅骨缺损?
  5. 怎么把此电脑放到桌面_Win10我的电脑怎么放到桌面
  6. 2015年12月16日 Oracle语句实现有则更新无则插入
  7. JS包管理器Yarn 与 npm比较
  8. 【模型选择】从0到1的数据价值实现需要数据分析师做些什么?
  9. python 存根_如何用Python编写类方法的存根
  10. “青春树儿童摄影网”首页制作
  11. (matlab) figure中画多条线,并对每条线依次加标注
  12. 小虎电商浏览器:拼多多层级有什么作用?多多参谋客服为你解答
  13. 红米 k30 pro 刷入欧版和小米钱包/商店
  14. 近50年前500部精品电影合集
  15. 获取文件夹中所有文件清单
  16. 计算机工业控制高职教材,计算机工业控制技术
  17. 螺旋矩阵java_Java实现螺旋矩阵
  18. MySQL-修改数据库密码
  19. 【Copula】考虑风光联合出力和相关性的Copula场景生成(Matlab代码实现)
  20. 快应用和小程序各自的优势

热门文章

  1. 浅谈win101809专业工作站版本激活并且获取数字权利的方法
  2. creator 无用资源整理 脚本工具的实现
  3. python爬取链家房屋及经纬度信息-以宁波为例
  4. jsharer验证码识别的c#实现
  5. SSM-MyBatis一些知识点()
  6. Windows10 Microsoft Edge右下角恶意弹窗关闭
  7. Android设备上七种恶意软件类型和排行
  8. 遥仰凰华重装系统后无法运行解决方法
  9. java中pageInfo分页带条件查询+查询条件的回显
  10. 开发小技巧【开发者工具】