返回顶部
首页 > 资讯 > 后端开发 > Python >python OpenCV图像直方图如何处理
  • 422
分享到

python OpenCV图像直方图如何处理

2023-07-02 13:07:20 422人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇“python OpenCV图像直方图如何处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python&nb

这篇“python OpenCV图像直方图如何处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python OpenCV图像直方图如何处理”文章吧。

1.图像直方图基本含义和绘制

首先我们先要了解一下python三大剑客之一——matplotlib
我们都知道matlab作为一个工具是公认的绘图牛,但是我想说的是python下的matplotlib这个超级剑客也是非常厉害的,因为python近年来才火热起来,所以热度没有matlib高,但是matlib可以实现的功能作为python都是差不多可以实现的。
我们回归正题,先来介绍下matplotlib怎么简单的画一个直方图。

import numpy as npimport matplotlib.pyplot as pltx=np.arange(0,5,0.1)y=np.sim(x)plt.plot(x,y)

简单的不能再简单了吧,我们使用它去绘制一个sin(x)的函数图像。

python OpenCV图像直方图如何处理

那么matplotlib如何和CV一起工作呢?

import cv2import matplotlib.pyplot as plto=cv2.imread("image\\boatGray.bmp")histb = cv2.calcHist([o],[0],None,[256],[0,255])plt.plot(histb,color='b')plt.show()

结果是(也很好理解吧):

python OpenCV图像直方图如何处理

针对于彩色图像我们也可以针对BGR分别作图。

import cv2import matplotlib.pyplot as plto=cv2.imread("image\\girl.bmp")histb = cv2.calcHist([o],[0],None,[256],[0,255])histg = cv2.calcHist([o],[1],None,[256],[0,255])histr = cv2.calcHist([o],[2],None,[256],[0,255])plt.plot(histb,color='b')plt.plot(histg,color='g')plt.plot(histr,color='r')plt.show()

python OpenCV图像直方图如何处理

直方图的绘制我们使用的函数还有:函数hist
功能:根据数据源和像素级绘制直方图。
语法: hist(数据源,像素级)
数据源:图像,必须是一维数组
像素级:一般是256,指[0,255]

python OpenCV图像直方图如何处理

功能:将多维数组降为一维数组。格式:一维数组=多维数组.ravel()

import cv2import matplotlib.pyplot as plto=cv2.imread("image\\boat.jpg")cv2.imshow("o",o)cv2.waiTKEy()cv2.destroyAllwindows()plt.hist(o.ravel(),256)

python OpenCV图像直方图如何处理

2.OpenCV统计直方图并绘制

使用OpenCV对图像进行绘制的和横坐标表示像素值比如[0,255],纵坐标表示像素值的个数。

绘制函数:

hist = cv2.calcHist( images, channels, mask, histSize, ranges, accumulate )

其中,hist返回结果是一个直方图,返回的直方图,是一个二维数组。
image原始图像:图像需要使用“[ ]”括起来使用。
channels:

通道编号需要用中括号括起来输入图像是灰度图时,它的值是[0];彩色图像可以是[0],[1],[2]。分别对应通道B,G,R。
mask:掩码图像统计整幅图像的直方图,设为None。统计图像某一部分的直方图时,需要掩码图像。
histSize
BINS的数量,例如【256】
ranges
像素值范围RANGE
accumulate默认值为false。如果被设置为true,则直方图在开始分配时不会被清零。该参数允许从多个对象中计算单个直方图,或者用于实时更新直方图。多个直方图的累积结果,用于对一组图像计算直方图。

使用OpenCV画出直方图:

import cv2import matplotlib.pyplot as plto=cv2.imread("image\\girl.bmp")histb = cv2.calcHist([o],[0],None,[256],[0,255])histg = cv2.calcHist([o],[1],None,[256],[0,255])histr = cv2.calcHist([o],[2],None,[256],[0,255])plt.plot(histb,color='b')plt.plot(histg,color='g')plt.plot(histr,color='r')plt.show()

python OpenCV图像直方图如何处理

3.使用掩码的直方图-直方图、掩膜

python OpenCV图像直方图如何处理

掩码说实话就是使用掩膜的黑色部分把原始图像的部分给覆盖掉,也称为过滤掉。那么我们怎么做呢?首先我们需要创建一个掩膜:

mask=np.zeros(image.shape,np.uint8)mask[200:400,200:400]=255

首先创建一个全0的和原图像size一致的,然后我们把指定范围指定为白色。然后传入函数内:

import cv2import numpy as npimport matplotlib.pyplot as plt显示直方图image=cv2.imread("image\\girl.bmp",cv2.IMREAD_GRAYSCALE)mask=np.zeros(image.shape,np.uint8)mask[200:400,200:400]=255histMI=cv2.calcHist([image],[0],mask,[256],[0,255])histImage=cv2.calcHist([image],[0],None,[256],[0,255])plt.plot(histImage)plt.plot(histMI)

结果是:

python OpenCV图像直方图如何处理

掩膜原理:

python OpenCV图像直方图如何处理

说实在的就是与和或的关系,与就是一个不行就都不行。或就是一个行就可以。

python OpenCV图像直方图如何处理

而我们的掩膜原理主要用到的就是与操作;

python OpenCV图像直方图如何处理

计算结果 = cv2.bitwise_and(图像1,图像2)

import cv2import numpy as npimport matplotlib.pyplot as pltimage=cv2.imread("image\\boat.bmp",0)mask=np.zeros(image.shape,np.uint8)mask[200:400,200:400]=255mi=cv2.bitwise_and(image,mask)cv2.imshow('original',image)cv2.imshow('mask',mask)cv2.imshow('mi',mi)cv2.waitKey()cv2.destroyAllWindows()

python OpenCV图像直方图如何处理

4.直方图均衡化原理及函数

python OpenCV图像直方图如何处理

在维基百科是这样定义的:

python OpenCV图像直方图如何处理

对应在图像上就是:

python OpenCV图像直方图如何处理

python OpenCV图像直方图如何处理

前提:如果一幅图像占有全部可能的灰度级,并且均匀分布。
结论:该图像具有高对比度和多变的灰度色调。
外观:图像细节丰富,质量更高。

算法:

  • 计算累计直方图

  • 将累计直方图进行区间转换

  • 在累计直方图中,概率相近的原始值,会被处理为相同的值。

1.计算灰度级出现的概率情况

python OpenCV图像直方图如何处理

????????:第K个灰度级
????????:第k级灰度的像素个数
N:图像内总像素的个数
L:灰度级最大值,灰度值区间[0,L-1]
2.变换函数

python OpenCV图像直方图如何处理

我们把公式表现在图片上就是:

python OpenCV图像直方图如何处理

python OpenCV图像直方图如何处理

python OpenCV图像直方图如何处理

这样就完成了从原始图像计算得到了均衡直方图。

python OpenCV图像直方图如何处理

虽然二者相似。但右侧的分布更均衡,相邻像素级概率和与高概率近似相等。可应用到医疗图像处理,车牌识别,人脸识别。

python OpenCV图像直方图如何处理

对应函数是:dst = cv2.equalizeHist( src )

import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('image\\equ.bmp',cv2.IMREAD_GRAYSCALE)equ = cv2.equalizeHist(img)plt.hist(img.ravel(),256)plt.figure()plt.hist(equ.ravel(),256)

python OpenCV图像直方图如何处理

我们处理一下lena,就是这样:

python OpenCV图像直方图如何处理

5.子图的绘制

我们有的时候为了方便对比,会想要把几个图放在一张大图中进行比较,那么我们怎么去做呢?有没有一个函数可以完成这个操作呢。
subplot(nrows, ncols, plot_number)
nrows表示行数,ncols表示列数,plot_number表示第几个。subplot(2,3,4)那么就表示2行三列,第四个图。
当每一个参数都小于10时,可以直接书写三个数字,表示为“subplot(234)

import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('image\\boatGray.bmp',cv2.IMREAD_GRAYSCALE)equ = cv2.equalizeHist(img)plt.subplot(121),plt.hist(img.ravel(),256)plt.subplot(122),plt.hist(equ.ravel(),256)

python OpenCV图像直方图如何处理

imshow(X, cmap=None)
X表示要绘制的图像,cmap表示colORMap,颜色图谱,默认为RGB(A)颜色空间。
灰度图像 :colormap,颜色图谱,默认为RGB(A)颜色空间使用参数cmap=plt.cm.gray
彩色图像 :colormap,颜色图谱,默认为RGB(A)颜色空间,如果使用opencv读入的图像,默认空间为BGR,需要调整色彩空间为RGB。

import cv2import matplotlib.pyplot as plto = cv2.imread('image\\girl.bmp')g=cv2.cvtColor(o, cv2.COLOR_BGR2GRAY)plt.subplot(221)plt.imshow(o),plt.axis('off')plt.subplot(222)plt.imshow(o,cmap=plt.cm.gray),plt.axis('off')plt.subplot(223)plt.imshow(g),plt.axis('off')plt.subplot(224)plt.imshow(g,cmap=plt.cm.gray),plt.axis('off')

python OpenCV图像直方图如何处理

第一个图是:彩色图像,使用默认参数。
第二个图是:彩色图像,使用参数cmap=plt.cm.gray
第三个图是:灰色图像,使用默认参数
第四个图是:灰色图像,使用参数cmap=plt.cm.gray
那么只有第四个图是正确的。

对于彩色图像:

import cv2import matplotlib.pyplot as pltimg = cv2.imread('image\\girl.bmp')b,g,r=cv2.split(img)img2=cv2.merge([r,g,b])plt.subplot(121)plt.imshow(img),plt.axis('off')plt.subplot(122)plt.imshow(img2),plt.axis('off')

必须要将BGR split然后merge成RGB才可以。

python OpenCV图像直方图如何处理

6.直方图均衡化对比

import cv2import matplotlib.pyplot as pltimg = cv2.imread('image\\boat.bmp',cv2.IMREAD_GRAYSCALE)equ = cv2.equalizeHist(img)plt.subplot(221)plt.imshow(img,cmap=plt.cm.gray),plt.axis('off')plt.subplot(222)plt.imshow(equ,cmap=plt.cm.gray),plt.axis('off')plt.subplot(223)plt.hist(img.ravel(),256)plt.subplot(224)plt.hist(equ.ravel(),256)

python OpenCV图像直方图如何处理

以上就是关于“python OpenCV图像直方图如何处理”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网Python频道。

--结束END--

本文标题: python OpenCV图像直方图如何处理

本文链接: https://www.lsjlt.com/news/342149.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python OpenCV图像直方图如何处理
    这篇“python OpenCV图像直方图如何处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python&nb...
    99+
    2023-07-02
  • python OpenCV图像直方图处理
    目录1.图像直方图基本含义和绘制2.OpenCV统计直方图并绘制3.使用掩码的直方图-直方图、掩膜4.直方图均衡化原理及函数5.子图的绘制6.直方图均衡化对比1.图像直方图基本含义和...
    99+
    2024-04-02
  • Python+OpenCV图像处理之直方图统计
    目录1. 直方图概述(1)基本概念(2)直方图中的术语2. 直方图绘制(1)读取图像信息(2)绘制直方图3. 掩膜直方图(1)基本概念(2)实现代码4. H-S 直方图(1)基本概念...
    99+
    2024-04-02
  • python中opencv 直方图处理
    目录直方图处理直方图的含义绘制直方图使用Numpy绘制直方图使用OpenCV绘制直方图使用掩模绘制直方图直方图均衡化直方图均衡化原理直方图均衡化处理pyplot 模块介绍subplo...
    99+
    2024-04-02
  • OpenCV图像处理之直方图比较方法详解
    目录一、直方图比较二、图像直方图比较方法三、代码实现四、图像处理效果一、直方图比较 直方图比较是对输入的两张图像进行计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算...
    99+
    2024-04-02
  • 基于OpenCV如何生成图像直方图
    这篇文章将为大家详细讲解有关基于OpenCV如何生成图像直方图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。01. 什么是图像直方图?在开始定义直方图之前,为简单起见我们先使用灰度图像,稍后再解释彩色图像...
    99+
    2023-06-14
  • Python+OpenCV图像处理之直方图统计的示例分析
    这篇文章主要为大家展示了“Python+OpenCV图像处理之直方图统计的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python+OpenCV图像处理之直方图统计的示例分析”这篇文章...
    99+
    2023-06-22
  • OpenCV-Python直方图均衡化如何实现图像去雾
    小编给大家分享一下OpenCV-Python直方图均衡化如何实现图像去雾,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!直方图均衡化直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的...
    99+
    2023-06-15
  • OpenCV-Python直方图均衡化实现图像去雾
    直方图均衡化 直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的图像。这种均衡化,即实现了灰度值统计上的概率均衡,也实现了人类视觉系统上(H...
    99+
    2024-04-02
  • Python数字图像处理基础直方图详解
    目录直方图的定义直方图的性质直方图的应用图像增强图像分割图像识别Python直方图的计算直方图的定义 直方图的性质 只统计某个灰度级出现的次数,图像的大小不一样的话, 某灰度值...
    99+
    2024-04-02
  • OpenCV图像形态学如何处理
    这篇文章主要讲解了“OpenCV图像形态学如何处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“OpenCV图像形态学如何处理”吧!1.腐蚀操作从下面代码中可以看到有三幅腐蚀程度不同的图,腐...
    99+
    2023-07-05
  • OpenCV图像处理入门
    😊😊😊欢迎来到本博客😊😊😊 本次博客内容将继续讲解关于OpenCV的相关知识 🎉作者...
    99+
    2023-09-01
    opencv 图像处理 计算机视觉 人工智能 python
  • opencv-python基本图像处理详解
    目录一、使用matplotlib显示图1、显示热量图 2、显示灰度图二、使用cv.imread显示图像1、显示灰度图像总结一、使用matplotlib显示图 impor...
    99+
    2024-04-02
  • opencv-python图像处理怎么安装
    这篇文章主要讲解了“opencv-python图像处理怎么安装”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“opencv-python图像处理怎么安装”吧!一、安装opencv关于openc...
    99+
    2023-06-22
  • Opencv图像处理中如何使用mask
    这篇文章将为大家详细讲解有关Opencv图像处理中如何使用mask,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。图像基本运算图像的基本运算有很多种,比如两幅图像可以相加、相减、相乘、相除、位运算、平方根、...
    99+
    2023-06-14
  • OpenCV图像处理之图像拼接详解
    目录图像拼接技术一、需求分析二、具体步骤三、代码实现图像拼接技术 一、需求分析 将下面两张图像进行拼接 拼接得到一张完整的图像 二、具体步骤 1.选择特征点 //1、选...
    99+
    2022-11-13
    OpenCV 图像处理 图像拼接 OpenCV 图像拼接 OpenCV 图像处理
  • 如何进行Python OpenCV图像模糊处理分析
    这篇文章跟大家分析一下“如何进行Python OpenCV图像模糊处理分析”。内容详细易懂,对“如何进行Python OpenCV图像模糊处理分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有...
    99+
    2023-06-26
  • Python图像运算之图像掩膜直方图和HS直方图详解
    目录一.图像掩膜直方图二.图像HS直方图三.直方图判断白天黑夜四.总结一.图像掩膜直方图 如果要统计图像的某一部分直方图,就需要使用掩码(蒙板)来进行计算。假设将要统计的部分设置为白...
    99+
    2024-04-02
  • 如何使用Python的OpenCV库处理图像和视频
    目录介绍计算机视觉OpenCV应用:安装使用 OpenCV 处理图像1. 从文件中读取图像2. 调整图像大小:3. 旋转图像4. 翻转图像:5. 重写图像6. 裁剪图像7. 绘制形状...
    99+
    2024-04-02
  • Python 第三方opencv库实现图像分割处理
    目录前言1.加载图片2.对图片做灰度处理3.对图片做二值化处理3.1.自定义阈值4.提取轮廓5.对轮廓画矩形框6.分割图片并保存7.查看分割图片8.完整代码前言 所需要安装的库有: ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作