首页 > 编程语言 >opencv-python 4.10.3. 直方图3:2D直方图

opencv-python 4.10.3. 直方图3:2D直方图

时间:2023-04-03 17:01:43浏览次数:43  
标签:img python 180 opencv 直方图 import 256 cv

介绍

我们学习计算并绘制了一维直方图。 它之所以被称为一维,是因为我们只考虑一个特征,即像素的灰度强度值。 但在二维直方图中,需要考虑两个特征。 通常,它用于查找颜色直方图,其中两个特征是每个像素的色调值和饱和度值。

OpenCV中的2D直方图

它很简单,使用相同的函数cv.calcHist()计算。 对于颜色直方图,我们需要将图像从BGR转换为HSV。(记住,对于1D直方图,我们从BGR转换为灰度)。 对于2D直方图,其参数将修改如下:

  • channels = [0,1]因为我们需要处理H和S平面。
  • b = H平面为[180,256] 180,S平面为256。
  • range = [0,180,0,256] Hue值介于0和180之间,饱和度介于0和256之间。

现在检查以下代码:

import numpy as np
import cv2 as cv

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

Numpy中的2D直方图

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

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

img = cv.imread('home.jpg')
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
hist, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])

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

现在我们可以检查如何绘制这种颜色直方图。

绘制2D直方图

方法 - 1:使用cv.imshow()

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

img = cv.imread(r'C:\Users\yuyalong\Pictures\Saved Pictures\D.jpg')
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
hist = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

cv.imshow('img', img)
cv.imshow('hist', hist)
cv.waitKey(0)

image

我们得到的结果是一个大小为180x256的二维数组。 因此我们可以像使用cv.imshow()函数一样正常显示它们。 它将是一个灰度图像,除非你知道不同颜色的色调值,否则它不会过多地了解那里的颜色。

方法-2:使用Matplotlib

我们可以使用matplotlib.pyplot.imshow()函数绘制具有不同颜色图的2D直方图。 它让我们更好地了解不同的像素密度。 但是,除非你知道不同颜色的色调值,否则这也不会让我们知道第一眼看到的是什么颜色。 我还是喜欢这种方法。 它简单而且更好。

注意:在使用此功能时,请记住,插值标志应该最接近以获得更好的结果。

考虑代码:

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

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

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

下面是输入图像及其颜色直方图。 X轴显示S值,Y轴显示Hue。
image
在直方图中,你可以看到H = 100和S = 200附近的一些高值。它对应于天空的蓝色。 类似地,在H = 25和S = 100附近可以看到另一个峰值。它对应于宫殿的黄色。 你可以使用任何图像编辑工具(如GIMP)对其进行验证。

标签:img,python,180,opencv,直方图,import,256,cv
From: https://www.cnblogs.com/yimeimanong/p/17283599.html

相关文章

  • Python3内置函数之E系列
    1、enumerate()在Python中,enumerate()是一个内置函数,用于将一个可迭代对象转换为一个枚举对象,该对象包含每个元素的索引和对应的值。enumerate()函数返回的是一个由元组组成的迭代器,每个元组包含两个元素,第一个元素是元素的索引,第二个元素是元素的值。 2、eval()在Python中,e......
  • Python常见面试题015.请实现一个如下功能的函数
    015.请实现一个如下功能的函数来自python黑魔法题目实现一个add函数,可以"反复"调用,得到累加的结果defadd(num):...add(1)#输出1add(2)#输出2add(1)(2)#输出3(即1+2)add(1)(2)(3)#输出6思考一开始我想到的是用一个参数,类型是list,能保存用户的传......
  • Python 自动化指南(繁琐工作自动化)第二版:十九、处理图像
    原文:https://automatetheboringstuff.com/2e/chapter19/如果你有一台数码相机,或者即使你只是从手机上传照片到脸书,你可能会一直碰到数码图像文件。你可能知道如何使用基本的图形软件,如微软的画图或Paintbrush,甚至更高级的应用,如AdobePhotoshop。但是如果你需要编辑大量的图......
  • Python 自动化指南(繁琐工作自动化)第二版:二十、使用 GUI 自动化控制键盘和鼠标
    原文:https://automatetheboringstuff.com/2e/chapter20/了解用于编辑电子表格、下载文件和启动程序的各种Python模块是很有用的,但有时您需要使用的应用没有任何模块。在计算机上实现任务自动化的终极工具是你编写的直接控制键盘和鼠标的程序。这些程序可以通过发送虚拟击键......
  • Python 自动化指南(繁琐工作自动化)第二版:附录 A:安装第三方模块
    原文:https://automateboringuff.com/2e/appendix/出版后添加:你可以通过安装带有PIP的automateboringstuff模块来安装所有需要的模块(带有本书中使用的版本)。从命令提示符或终端窗口运行pipinstall--userautomateboringstuff。许多开发人员编写了他们自己的模块,将Pytho......
  • Python 自动化指南(繁琐工作自动化)第二版:附录 B:运行程序
    原文:https://automateboringuff.com/2e/appendixb/如果您在Mu中打开了一个程序,运行它只需按F5或单击窗口顶部的运行按钮。这是一种在编写程序的同时运行程序的简单方法,但是打开Mu来运行你完成的程序可能是一种负担。根据您使用的操作系统,有更方便的方法来执行Python脚......
  • Python 自动化指南(繁琐工作自动化)第二版:十、组织文件
    原文:https://automatetheboringstuff.com/2e/chapter10/在前一章中,你学习了如何在Python中创建和写入新文件。您的程序也可以组织硬盘上预先存在的文件。也许你有过这样的经历:浏览一个装满几十个、几百个、甚至几千个文件的文件夹,然后手动复制、重命名、移动或压缩它们。或......
  • Python 自动化指南(繁琐工作自动化)第二版:十一、调试
    原文:https://automatetheboringstuff.com/2e/chapter11/既然你已经知道了足够多的知识来编写更复杂的程序,你可能会开始发现其中不那么简单的错误。这一章介绍了一些工具和技术,用于查找程序中错误的根本原因,帮助您更快、更省力地修复错误。套用程序员之间的一个老笑话,写代码占......
  • Python 自动化指南(繁琐工作自动化)第二版:一、PYTHON 基础知识
    原文:https://automatetheboringstuff.com/2e/chapter1/Python编程语言具有广泛的语法结构、标准库函数和交互式开发环境特性。幸运的是,你可以忽略其中的大部分;你只需要学会足够多的东西来编写一些方便的小程序。但是,在做任何事情之前,您必须学习一些基本的编程概念。就像一个......
  • 【Python】 pytest 之Hook函数 (钩子函数)
    Hook函数(钩子函数)钩子函数在pytest称之为Hook函数,它pytest框架的开发者,为了让用户更好的去扩展开发预留的一些函数。而预留的这些函数,在整个测试执行的生命周期中特定的阶段会自动去调用执行关于 pytest 中的预留钩子,可以通过开发插件,和在conftest.py去实现这些钩子......