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  __getattr__与__setattr__使用方法
Sep 06 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
Python实现调度算法代码详解
Dec 01 Python
Python文件操作基本流程代码实例
Dec 11 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
jupyter 添加不同内核的操作
Feb 06 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
用文本作数据处理
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
2016/05/26 PHP
php递归函数怎么用才有效
2018/02/24 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
详解React 元素渲染
2020/07/07 Javascript
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
python 切换root 执行命令的方法
2019/01/19 Python
如何基于Python批量下载音乐
2019/11/11 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
快速创建python 虚拟环境
2020/11/28 Python
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
AOP的定义以及作用
2013/09/08 面试题
应届大专毕业生个人自荐信
2013/09/22 职场文书
运动会跳远加油稿
2014/02/20 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
服务承诺书范文
2014/05/19 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL