Opencv实现二维直方图的计算及绘制


Posted in Python onJuly 21, 2021

这篇博客将介绍如何使用Python,Opencv进行二维直方图的计算及绘制(分别用Opencv和Numpy计算),二维直方图可以让我们对不同的像素密度有更好的了解。

1. 效果图

原始图如下:

Opencv实现二维直方图的计算及绘制

1维直方图如下:

Opencv实现二维直方图的计算及绘制

2维直方图如下:

X轴显示S值,Y轴显示色调。

Opencv实现二维直方图的计算及绘制

hsvmap效果图如下:

Opencv实现二维直方图的计算及绘制

2. 源码

# OpenCV中的二维直方图:使用相同的函数cv2.calcHist()计算。
# 对于1D直方图,我们从BGR转换为灰度
# 对于2D直方图,需要将图像从BGR转换为HSV

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('ym.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 1维直方图
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
hist, bins = np.histogram(img.ravel(), 256, [0, 256])
plt.hist(img.ravel(), 256, [0, 256])
plt.show()

# 二维直方图可以让我们对不同的像素密度有了更好的了解
# OpenCV计算2D直方图
# HSV图像 [0,1]表示H、S通道,[180,256]表示H、S的bins分别为180、256
# [0,180,0,256]表示值的范围
hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

hist = np.clip(hist * 0.005, 0, 1)
cv2.imshow('hist', hist)
cv2.waitKey(0)

plt.imshow(hist, interpolation='nearest')
plt.show()

# Numpy计算1D直方图:np.histogram();
# Numpy计算2D直方图:np.historogram2d()
h, s, v = cv2.split(hsv)
hist, xbins, ybins = np.histogram2d(h.ravel(), s.ravel(), [180, 256], [[0, 180], [0, 256]])
plt.imshow(hist, interpolation='nearest')
plt.show()

参考

 https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_histograms/py_2d_histogram/py_2d_histogram.html#twod-histogram

https://github.com/seminar2012/opencv/blob/master/samples/python/color_histogram.py

到此这篇关于Opencv实现二维直方图的计算及绘制的文章就介绍到这了,更多相关Opencv 二维直方图 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python编程语言的35个与众不同之处(语言特征和使用技巧)
Jul 07 Python
Python常用随机数与随机字符串方法实例
Apr 09 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
Python 中的range(),以及列表切片方法
Jul 02 Python
Python3.4 splinter(模拟填写表单)使用方法
Oct 13 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
Oct 30 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
Feb 25 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
python scrapy简单模拟登录的代码分析
Jul 21 #Python
python异步的ASGI与Fast Api实现
Jul 16 #Python
Python实现PIL图像处理库绘制国际象棋棋盘
Flask使用SQLAlchemy实现持久化数据
Jul 16 #Python
Python多个MP4合成视频的实现方法
Jul 16 #Python
Python如何解决secure_filename对中文不支持问题
利用Matlab绘制各类特殊图形的实例代码
You might like
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
详解php中的implements 使用
2017/06/13 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
理解Javascript_05_原型继承原理
2010/10/13 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
Python引用计数操作示例
2018/08/23 Python
用python生成1000个txt文件的方法
2018/10/25 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
在什么时候需要使用"常引用"
2015/12/31 面试题
员工培训协议书
2014/09/15 职场文书
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python
maven依赖的version声明控制方式
2022/01/18 Java/Android
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android