【python opencv】二维直方图

编程之家收集整理的这篇文章主要介绍了【python opencv】二维直方图编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我们计算并绘制了一维直方图。 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值。 但是在二维直方图中,您要考虑两个特征。 通常,它用于查找颜色直方图,其中两个特征是每个像素的色相和饱和度值。我们将尝试了解如何创建这种颜色直方图,这对于理解诸如直方图反向投影之类的更多主题将很有用。

OpenCV中的二维直方图

它非常简单,并且使用相同的函数cv.calcHist()进行计算。 对于颜色直方图,我们需要将图像从BGR转换为HSV。(请记住,对于一维直方图,我们从BGR转换为灰度)。对于二维直方图,其参数将进行如下修改

  • channel = [0,1]因为我们需要同时处理H和S平面。
  • bins = [180,256] 对于H平面为180,对于S平面为256。
  • range = [0,180,256] 色相值介于0和180之间,饱和度介于0和256之间。

现在检查以下代码

import numpy as np
 cv2 as cv
img = cv.imread('home.jpg')
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
hist = cv.calcHist([hsv],[0,1],None,[180,256],256])

原始图像:

处理之后:

Numpy中的二维直方图

Numpy还为此提供了一个特定的函数:np.histogram2d()。(记住,对于一维直方图我们使用了np.histogram())。

hsv =]
hist,xbins,ybins = np.histogram2d(h.ravel(),s.ravel(),[[0,180],256]])
cv2_imshow(hist)

第一个参数是H平面,第二个是S平面,第三个是每个箱子的数量,第四个是它们的范围。

绘制二维直方图

方法1:使用 cv.imshow()

我们得到的结果是尺寸为80x256的二维数组。因此,可以使用cv.imshow()函数像平常一样显示它们。它将是一幅灰度图像,除非您知道不同颜色的色相值,否则不会对其中的颜色有太多了解。

方法2:使用Matplotlib

我们可以使用matplotlib.pyplot.imshow()函数绘制具有不同颜色图的2D直方图。它使我们对不同的像素密度有了更好的了解。但是,除非您知道不同颜色的色相值,否则乍一看并不能使我们知道到底是什么颜色。我还是更喜欢这种方法。它简单而更好。

注意 使用此功能时,请记住,插值法应采用最近邻以获得更好的结果。

考虑下面的代码

hsv =] )
plt.imshow(hist,interpolation = nearest)
plt.show()

在直方图中,您可以在H = 100和S = 200附近看到一些较高的值。它对应于天空的蓝色。同样,在H = 25和S = 100附近可以看到另一个峰值。它对应于宫殿的黄色。您可以使用GIMP等任何图像编辑工具进行验证。

 

参考:

http://woshicver.com/FifthSection/4_10_3_%E7%9B%B4%E6%96%B9%E5%9B%BE3%EF%BC%9A%E4%BA%8C%E7%BB%B4%E7%9B%B4%E6%96%B9%E5%9B%BE/ 

总结

以上是编程之家为你收集整理的【python opencv】二维直方图全部内容,希望文章能够帮你解决【python opencv】二维直方图所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478

猜你在找的Python相关文章

Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。 安装xlrd pip install xlrd 简单的表格读取
2019年7月3日早上,在百度AI开发者大会上,一个来自山西的青年,将一瓶矿泉水浇在了同样来自山西的李彦宏身上。 可以回顾一下 https://b23.tv/av57665929/p1 ,着实让人一惊
itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。 开源地址 https://github.com/littlecodersh/ItChat 文档: https://itc
Socket有一个缓冲区,缓冲区是一个流,先进先出,发送和取出的可自定义大小的,如果取出的数据未取完缓冲区,则可能存在数据怠慢。其中【recv(1024)】表示从缓冲区里取最大为1024个字节,但实际
ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。 本质上,它是一个简洁的key-value存储系统。 其主要用途有:动态数据库缓存、不同应用(语言)中共享数据 安装 安装及命令介绍
如果使用pymysql,则可以在view中直接import pymysql进行操作,与原操作无区别 Django数据库框架支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在s
使用原生SQL语句进行对数据库操作,可完成数据库表的建立和删除,及数据表内容的增删改查操作等。其可操作性很强,如可以直接使用“show databases”、“show tables”等语句进行表格之
类即是一个模型,根据模型建立起不同的对象,对象间拥有共同的一些属性 简单的类: 类变量和实例变量: 类变量: 类及所有实例共享变量,推荐使用方法是 【类名.变量名】 实例变量(self.变量名): 只
Python的进程和线程是使用的操作系统的原生线程和进程,其是去调用操作系统的相应接口实现 进程:之间不可直接共享数据,是资源的集合,进程必须有一个线程 线程:基于进程,之间可直接共享数据,可执行,只
页面跳转 页面跳转的url中必须在最后会自动添加【】,所以在urls.py的路由表中需要对应添加【】 本地跳转需要参考urls.py的路由表 Cookie 设置cookie 获取cookie 删除
存储系统数据缓存一般会使用三个模块:Mongodb,redis,memcache。其中memcache是轻量级缓存,只能将数据保存到内存中,redis可以配置数据保存在内存还是硬盘。 其主要用途有:不