OpenCV基于Python二维直方图

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

目标

在本篇文章中,我们将学习查找和绘制2D直方图,包括以下内容:

  • OpenCV中的二维直方图
  • Numpy中的二维直方图
  • 绘制二维直方图
  • 示例补充

前言

在直方图板块的第一篇文章图像直方图的查找、绘制和分析中,我们计算并绘制了一维直方图, 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值。 但是在二维直方图中,需要考虑两个特征,通常,它用于查找颜色直方图,其中两个特征是每个像素的色相和饱和度值。我们将尝试了解如何创建这种颜色直方图,它将有助于理解像直方图反向投影这样的更深入的内容。

1. OpenCV中的二维直方图

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

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

演示代码1:

import numpy as np
import cv2 as cv

# 加载原始图像
img = cv.imread('./data/leuvenA.jpg')
# 显示原始图像
cv.imshow('img2', img)
# 转化为HSV
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
# 显示HSV图像
cv.imshow('hsv', hsv)
# cv.calcHist() 来查找整个图像的二维直方图
hist = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
# 可调整窗口大小
cv.namedWindow('2Dhist_img', 0)
# 显示二维直方图
cv.imshow('2Dhist_img', hist) # 显示图像窗口较小,窗口可调整
cv.waitKey()

原始图像

图1 原始图像

HSV图像

图2 HSV图像

OpenCV中的二维直方图

图3 OpenCV中的二维直方图

2. Numpy中的二维直方图

Numpy还为此提供了一个特定的函数:np.histogram2d()。

注意: 对于一维直方图我们使用了np.histogram()。

演示代码2:

import numpy as np
import cv2 as cv

# 加载原始图像
img = cv.imread('./data/leuvenA.jpg')
# 转化为HSV
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
# 分离出h, s通道
h, s = hsv[:, :, 0], hsv[:, :, 1]
# cv.histogram2d() 来查找整个图像的二维直方图
hist, xbins, ybins = np.histogram2d(h.ravel(), s.ravel(), [180, 256], [[0, 180], [0, 256]])
# 可调整窗口大小
cv.namedWindow('2Dhist_img', 0)
# 显示二维直方图
cv.imshow('2Dhist_img', hist) # 显示图像窗口较小,窗口可调整
cv.waitKey()

结果与上述在opencv中实现的一致。
Numpy中的二维直方图

图4 Numpy中的二维直方图

Tips: np.histogram2d()函数中,第一个参数是H平面,第二个是S平面,第三个是每个bin的数量,第四个是色相值和饱和度值的范围。

3. 绘制二维直方图

3.1 使用 cv.imshow()绘制

我们得到的结果是尺寸为 180x256 的二维数组。

print(hist.shape)

>>>(180, 256)

因此,可以使用cv.imshow()函数像平常一样显示它们。上面的演示代码1和演示代码2就是用cv.imshow()绘制的二维直方图,它是一幅灰度图像,除非你知道不同颜色的色相值,否则不会对其中的颜色有太多了解。

3.2 使用Matplotlib绘制

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

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

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

# 加载原始图像
img = cv.imread('./data/leuvenA.jpg')
# 转化为HSV
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
# cv.calcHist() 来查找整个图像的二维直方图
hist = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

# 原图cv读取BGR通道顺序转换成Matplotlib的RGB通道顺序,为了正常显示图像
img_BGR2RGB = cv.cvtColor(img, cv.COLOR_BGR2RGB)
# HSV图像cv处理的BGR通道顺序转换成Matplotlib的RGB通道顺序,为了正常显示图像
hsv_BGR2RGB = cv.cvtColor(hsv, cv.COLOR_BGR2RGB)

plt.subplot(131), plt.imshow(img_BGR2RGB), plt.title('Original_img')
plt.subplot(132), plt.imshow(hsv_BGR2RGB), plt.title('hsv_img')
plt.subplot(133), plt.imshow(hist, interpolation='nearest'), plt.title('2Dhist_img')
# 显示直方图
plt.show()

下面是输入图像及其颜色直方图。X轴显示饱和度S值,Y轴显示色相H值.
Matplotlib绘制的二维直方图

图5 Matplotlib绘制的二维直方图

二维直方图Matplotlib单独显示

图6 二维直方图Matplotlib单独显示

在直方图6中,你可以在H = 110和S = 25附近看到一些较高的值。它对应于天空的白灰色。同样,在H = 30和S = 30附近可以看到另一个峰值。它对应屋子的红砖色。

4. 补充一个示例

为加深对二维直方图Matplotlib绘制的理解,在此再给出一个补充示例,根据个人需要进行学习参考。

import cv2 as cv
from matplotlib import pyplot as plt

images = []
hists = []
# 图像二维直方图(Image 2D Histograms)
image_file_name = ['E:/Opencv-python-exercises/OpenCV4.1Tutorials/data/home.jpg', 'E:/Opencv-python-exercises/OpenCV4.1Tutorials/data/lena.jpg']
for i in range(len(image_file_name)):
    # 读取图像
    image = cv.imread(image_file_name[i])
    image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
    hsv_image = cv.cvtColor(image, cv.COLOR_RGB2HSV)
    hist = cv.calcHist([hsv_image], [0, 1], None, [180, 256], [0, 180, 0, 256])
    images.append(image)
    hists.append(hist)

# 显示图像
plt.figure('Image Display: 2D Histograms')
for i in range(len(images)):
    plt.subplot(2, 2, i * 2 + 1)
    plt.imshow(images[i], cmap='gray')
    plt.title('Original Image')
    plt.xticks([])
    plt.yticks([])
    plt.subplot(2, 2, i * 2 + 2)
    plt.imshow(hists[i], interpolation='nearest')
    plt.title('2D Histogram')
plt.show()

补充示例

图7 补充示例Matplotlib绘制二维直方图

5. 总结

在本篇文章中,主要介绍了二维直方图的查找及绘制,分析了OpenCV中的二维直方图与一维直方图的区别,解释了Numpy中二维直方图函数np.histogram2d()各参数含义,并利用cv.imshow()与Matplotlib分别绘制了二维直方图,最后还给出了一个补充示例,加深对二维直方图Matplotlib绘制的理解。

如果文章对你有帮助,欢迎一键三连哦~~

【OpenCV-Python】——绘制/查找图像直方图&全局/自适应直方图均衡化&二维直方图 由于是初学者可能很多地方没有总结完全或者有误,后续深入学习后会不断回来该删,也欢迎各位朋友指正!下次学习模板匹配和图像分割! 阅读详情

相关推荐

数字图像处理(入门篇)十五 OpenCV-Python计算和绘制图像的二维直方图

数字图像处理(入门篇)十五 OpenCV-Python计算和绘制图像的二维直方图

静谧、淡雅 269

【OpenCV-Python】21.OpenCV的二维直方图

21.OpenCV的二维直方图 文章目录前言一、OpenCV中的二维直方图二、Numpy中的二维直方图三、直方图示例1、使用Numpy函数计算直方图2、使用OpenCV函数计算直方图四、OpenCV-Python资源下载总结 前言   只统计像素的灰度值这一特征,可将其成为一维直方图。二维直方图可以统计像素的色相和饱和度,用于查找图像的颜色直方图。 一、OpenCV中的二维直方图   OpenCV仍然使用cv2.calcHist()函数来查找图像的颜色直方图,只是在指定参数时与之前有所区别。   c

每天都在学习的小博主 2958

BurpSuite实战:5分钟搞定Pikachu靶场表单爆破(附最新字典配置技巧)

本文通过Pikachu靶场实战,详细演示了如何使用BurpSuite的Intruder模块对Web登录表单进行暴力破解。从代理配置、请求捕获、集束炸弹模式设置,到载荷配置与结果分析,提供了完整的操作流程。文中还分享了2024年有效的字典获取与优化技巧,帮助安全测试人员快速定位弱口令漏洞。

weixin_29327977的博客 600

OpenCV-Python教程:直方图及其绘制(calcHist)

原文链接:http://www.juzicode.com/opencv-python-histogram-calchist-draw-hist 返回Opencv-Python教程 图像的直方图反映的是图像像素值的统计特征,比如一个CV_8U类型的图像,表示的是其在0~255的256种数值的分布情况。我们可以将统计“颗粒度”划分在每一个像素值上,当然统计区间也可以不必在每一个像素值上划分,也可以将0-255平分成更宽的区间,比如0-7,8-15…..248-255每8个像素值作为一个区间来统计。在直方图中

桔子code 的博客 9145

蓝桥杯FPGA赛道积分赛

代码如下: 按键驱动 代码如下 按键驱动 代码如下: 顶层文件 按键驱动 数码管驱动 声明:本代码借鉴网络资料,如有侵权和错误请联系作者删除。我是从寒假开始备赛的,由于我基础不行,备赛过程中也是混混呃呃的,备赛效率不高,总体来说备赛不认真,有点拖拉,但是最后我也坚持备赛到了今天,在备赛过程中,即复习了旧的东西,也学到了新的东西,总结起来还是有点收获的,后天北京、天津、河北地区就要进行省赛了,我会全力以赴,不管结果怎么样,尽力就好,最后祝大家都能

weixin_69804913的博客 1986

别再手动挂载NPU了!手把手教你用Ascend-Docker-Runtime一键启动昇腾AI容器

本文详细介绍了如何使用Ascend-Docker-Runtime一键启动昇腾AI容器,大幅简化NPU设备挂载流程。通过环境变量ASCEND_VISIBLE_DEVICES,开发者可以灵活指定NPU设备,提升开发效率。文章还提供了安装配置指南、高级使用技巧和常见问题排查方法,帮助开发者快速掌握这一高效工具。

weixin_42662605的博客 252

python绘制灰度图片直方图-python+opencv 灰度直方图及其二值化

图像直方图(histogram)是图像的统计学特征,常用于了解图像的基本特征以便分析。不过图像的直方图不具有空间特征。图像的灰度直方图(histogram),就是将图像转化成灰度图像之后,统计各个像素点的灰度值,绘制成直方图,其横轴是灰度值(0,255),纵轴是该灰度值所对应的像素的数目。对灰度直方图做积分=图像的size。灰度直方图1 defplt_hist(img):2 plt.his...

weixin_37988176的博客 4028

从 0 到 1:基于深度学习的图像识别系统开发实战

图像识别是指让计算机能够识别和理解图像中的内容,通常是通过计算机视觉技术来实现。深度学习,尤其是卷积神经网络(CNN),已经成为图像识别中最为流行和有效的技术。数据采集和预处理:获取并处理图像数据,使其适合于模型训练。模型训练:使用深度学习算法(如 CNN)训练模型,以学习图像中的特征。模型评估与优化:评估模型的性能,并通过调整超参数、优化算法等方法提高精度。模型部署与应用:将训练好的模型应用于实际的图像识别任务中。本文将带领你通过一个简单的图像分类问题,开发一个深度学习图像识别系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1218

python绘制二维直方图

如果想描述二维数据的分布特征,那么一个直方图显然是不够用的,为此可使用两个直方图分别代表`x`和`y`方向上的分布情况,同时透过散点图查看其整体的分布特征。

微小冷的学习笔记 2312

Altair HyperWorks软件二次开发:二次开发成果展示与报告撰写

HyperMesh Python API允许用户通过Python脚本控制HyperMesh的大部分功能,包括模型创建、修改和分析。它提供了丰富的函数库,可以处理节点、元素、材料属性、载荷和边界条件等。二次开发可以用于创建自定义工具,这些工具可以集成到HyperWorks中,提供特定的功能或简化复杂的操作。

kkchenjj的博客 1639

以 Cloud 为核心的设备 mTLS 证书体系:从产品需求到 OP-TEE 安全落地

本文探讨了以云端为核心的物联网设备mTLS证书体系构建方案。文章从产品需求出发,分析了云端必须采用mTLS+证书体系管理设备身份的原因,指出静态Token方案的三大缺陷:身份不可控、运营不可控和审计不可控。重点阐述了mTLS在产品中的核心功能是加密传输和双向认证,并详细列出了云端PKI、设备注册中心等必备组件。在设备侧,强调必须通过OP-TEE技术保护私钥安全,提出了一个包含密钥生成、CSR导出等功能的TA设计方案。最后,文章给出了云端端到端流程示例,说明如何将证书生命周期管理转化为可运营的产品能力,包括自

Interview_TC的博客 641

Python--图表绘制(二维线性图,箱线图,散点图,直方图,饼图)大合集

信息工程系实验报告 实验一: python的图表绘制 实验时间: 2019/3/27 实验地点: 实训室 实验步骤 饼图: # -* cod...

qq_40610760的博客 4371

[解决] PDF转图片,中文乱码或显示方框的解决方案

在Java开发中,将PDF文件转换为图片是一项常见的需求,但过程中可能会遇到中文乱码或显示方框的问题。本文将深入探讨这一问题,并提供详细的解决方案,帮助开发者顺利地完成PDF到图片的转换。

DazedMen的博客 1924

python做直方图-python OpenCV学习笔记实现二维直方图

本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下:官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d_histogram.html在前一篇文章中,我们计算并绘制了一维的直方图。它被称为一维,因为我们只考虑一个特性,即像素的灰度强度值。但是在二维直方图中,你可以考虑两个特征。通常它用于寻找颜色直方图,其...

weixin_37988176的博客 530

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型

一、本文介绍 本文记录的是基于 GhostNetV3 的 YOLOv11 轻量化改进方法研究。GhostNetV3的轻量模块采用重参数化方法,训练时为深度可分离卷积和1×1卷积添加线性并行分支,推理时通过逆重参数化移除分支、折叠操作,能够在不增加推理成本的同时提高性能,从而实现YOLOv11的轻量化改进。 专栏目录:YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进 专栏地址:YOLOv11改进专栏——以发表论文的角度,快速

Limiiiing的博客 1845

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

直方图 - 3:二维直方图 OpenCV-Python v4.7.0

我们将尝试理解如何创建这样的颜色直方图,这对理解直方图反投影等进一步的主题很有用。但是,这也不能让我们在第一眼就知道是什么颜色,除非你知道不同颜色的色相值。你可以在直方图中清楚地看到有哪些颜色,蓝色是有的,黄色是有的,还有一些由于棋盘造成的白色是有的。我把它留给读者,让他们去运行这段代码,分析它,并有你们自己的破解方法。这将是一个灰度图像,除非你知道不同颜色的色相值,否则它不会让人知道有哪些颜色。在使用这个函数时,请记住,为了得到更好的结果,插值标志应该是最近的。下面是输入图像和它的颜色直方图图。

hirshdz327的博客 314

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OpenCV-Python 直方图-3:二维直方图 | 二十八

目标 在本章中,我们将学习查找和绘制2D直方图。这将在以后的章节中有所帮助。 介绍 在第一篇文章中,我们计算并绘制了一维直方图。 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值。 但是在二维直方图中,您要考虑两个特征。 通常,它用于查找颜色直方图,其中两个特征是每个像素的色相和饱和度值。 已经有一个python示例(samples / python / color_histogram...

TensorFlowNews 2172

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Python+OpenCV:二维直方图(2D Histograms)

Python+OpenCV:二维直方图(2D Histograms) #################################################################################################### # 图像二维直方图(Image 2D Histograms) def lmc_cv_image_2d_histograms(): """ 函数功能: 图像二维直方图(Image 2D Histograms)。

《好好先生》专栏 1523

python histogramdd_python OpenCV学习笔记实现二维直方图

本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下:官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d_histogram.html在前一篇文章中,我们计算并绘制了一维的直方图。它被称为一维,因为我们只考虑一个特性,即像素的灰度强度值。但是在二维直方图中,你可以考虑两个特征。通常它用于寻找颜色直方图,其...

weixin_39524984的博客 97

python hist2d_python OpenCV学习笔记实现二维直方图

本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下:在前一篇文章中,我们计算并绘制了一维的直方图。它被称为一维,因为我们只考虑一个特性,即像素的灰度强度值。但是在二维直方图中,你可以考虑两个特征。通常它用于寻找颜色直方图,其中两个特征是每个像素的色调和饱和度值。有一个python样例(samples/python/color_histogram.py),用于查找颜色直...

weixin_39937447的博客 262

python histogramdd,python OpenCV学习笔记实现二维直方图

本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下:在前一篇文章中,我们计算并绘制了一维的直方图。它被称为一维,因为我们只考虑一个特性,即像素的灰度强度值。但是在二维直方图中,你可以考虑两个特征。通常它用于寻找颜色直方图,其中两个特征是每个像素的色调和饱和度值。有一个python样例(samples/python/color_histogram.py),用于查找颜色直...

weixin_29149341的博客 252

Python-opencv学习第二十五课:二维直方图

Python-opencv学习第二十五课:二维直方图 文章目录Python-opencv学习第二十五课:二维直方图一、学习部分二、代码部分1.引入库2.读入数据3.完整代码三、运行结果总结 一、学习部分 记录笔者学习Python-opencv学习第二十五课:二维直方图,代码资料来源于网络贾老师视频。 二、代码部分 1.引入库 代码如下: import cv2 as cv import matplotlib.pyplot as plt import numpy as np 2.读入数据 代码如下: def

qq_45825952的博客 365

Opencv4 -Python官方教程学习笔记22---二维直方图

目标 查找和绘制2D直方图。 介绍 在第一篇文章中,我们计算并绘制了一维直方图。 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值。 但是在二维直方图中,您要考虑两个特征。 通常,它用于查找颜色直方图,其中两个特征是每个像素的色相和饱和度值。 已经有一个python示例(samples / python / color_histogram.py)用于查找颜色直方图。 我们将尝试了解如何创建这种颜色直方图,这对于理解诸如直方图反向投影之类的更多主题将很有用。 标题 OpenCV中的二维直方图 它非

weixin_42233401的博客 301

opencv 直方图_OpenCV-Python 直方图-3:二维直方图 | 二十八

目标在本章中,我们将学习查找和绘制2D直方图。这将在以后的章节中有所帮助。介绍在第一篇文章中,我们计算并绘制了一维直方图。 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值。 但是在二维直方图中,您要考虑两个特征。 通常,它用于查找颜色直方图,其中两个特征是每个像素的色相和饱和度值。已经有一个python示例(samples / python / color_histogram.py)...

weixin_39838798的博客 98

python灰度直方图_OpenCV-Python 直方图-3:二维直方图 | 二十八

目标在本章中,我们将学习查找和绘制2D直方图。这将在以后的章节中有所帮助。介绍在第一篇文章中,我们计算并绘制了一维直方图。 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值。 但是在二维直方图中,您要考虑两个特征。 通常,它用于查找颜色直方图,其中两个特征是每个像素的色相和饱和度值。已经有一个python示例(samples / python / color_histogram.py)...

weixin_36397191的博客 342
上一篇: TypeError: slice indices must be integers or None or have an __index__ method原因分析及解决办法
下一篇: OpenCV基于Python傅里叶变换及高通/低通滤波
@DWC_DIP
博客等级 码龄7年 2673粉丝 60原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值