【OpenCV--直方图】

这篇具有很好参考价值的文章主要介绍了【OpenCV--直方图】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、直方图是什么?

1.描述:

2.相关术语:

二、直方图的计算和绘制

三、掩膜的应用

四、直方图均衡化:

五、自适应的直方图均衡化

一、直方图是什么?

1.描述:

1>直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的bin(直条/组距)当中。bin的数值可以是梯度、方向、色彩或任何其他特征。

2>图像直方图(Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素个数。其横坐标的左侧为较暗的区域,而右侧为较亮的区域。因此一张较暗图片的直方图中的数据多集中于左侧和中间部分,而整体明亮、只有少量阴影的图像则相反。

注意: 直方图是根据灰度图进行绘制的,而不是彩色图像,

2.相关术语:

1>dims:需要统计的特征数,dims=1指只统计了灰度值

2>bins:每个特征空间的子区段的数目

3>range:要统计的特征取值范围

二、直方图的计算和绘制

1.使用OpenCV中的方法统计直方图,再使用matplotlib进行绘制

cv.calcHist(images,channels,mask,histSize,ranges[,hist[,accumulate]])

参数:

1>images:原图像,当传入函数时[img]形式进行表示
2>channels:如果输入图像是灰度图,它的值就是[0]; 如果是彩色图像,传入的参数可以是[0],[1],[2]它们分别对应着通道B, G, R.
3>mask: 掩模图像,要统计整幅图像的直方图就把它设为None,若统计图像某一部分的直方图的话,需要制作一个掩膜图像

4> histSize:bin的数目,[256]形式进行表示
5>ranges: 像素值范围,通常为[0, 256]

2.示例:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img=cv.imread('cat.png',0)
#显示灰度图
#plt.imshow(img,cmap=plt.cm.gray)
#plt.show()
#统计直方图
hist=cv.calcHist([img],[0],None,[256],[0,256])
#绘制直方图
plt.figure(figsize=(10,8))
plt.plot(hist)
plt.show()

【OpenCV--直方图】【OpenCV--直方图】

 三、掩膜的应用

1.什么是掩膜:掩膜是用选定的图像、图形或物体,对要处理的图像进行遮挡,来控制图像处理的区域,在数字图像处理中,通常使用二维矩阵进行掩膜,掩膜是由0和1组成的一个二进制图像,利用该掩膜对要处理的图像进行掩膜,其中值为1的区域被处理,0区域被屏蔽,不会处理

2.掩膜的作用:我们使用cv.calcHist()查找完整图像的直方图,当要查找图像某些区域的直方图,只需要在查找直方图的区域上创建一个白色的掩膜图像,否则创建黑色,将其作为掩码mask传递

3.示例:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img=cv.imread('cat.png',0)
#plt.imshow(img,cmap=plt.cm.gray)
#plt.show()
#创建掩膜模板数据
mask=np.zeros(img.shape[:2],np.uint8)
#感兴趣设置成白色
mask[0:200,200:300]=1
#plt.imshow(mask,cmap=plt.cm.gray)
#plt.show()
#将掩膜与原图像进行与操作

mask_img=cv.bitwise_and(img,img,mask=mask)
plt.imshow(mask_img,cmap=plt.cm.gray)
plt.show()

【OpenCV--直方图】【OpenCV--直方图】【OpenCV--直方图】【OpenCV--直方图】

 四、直方图均衡化:

 1.概念描述:如果一幅图像整体很亮,那所有的像素值的取值个数应该都会很高。需要将此图像的直方图做一个横向拉伸,就可以扩大图像像素值的分布范围,提高图像的对比度,这就是直方图均衡化,在X光图像中使用广泛,可以提高骨架结构的显示,另外在曝光过度或不足的图像中可以更好的突出细节。

2.API:

dst=cv.equalizeHist(img)#输出结果就是均衡化的直方图

3.示例:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img=cv.imread('cat.png',0)
#plt.imshow(img,cmap=plt.cm.gray)
#plt.show()
dst=cv.equalizeHist(img)
plt.imshow(dst,cmap=plt.cm.gray)
plt.show()

【OpenCV--直方图】【OpenCV--直方图】

 五、自适应的直方图均衡化

1.描述:

直方图均衡化中,考虑的是图像全局的对比度,许多情况下,会由于均衡化而丢失许多信息,为了解决此问题,需要使用自适应的直方图均衡化,此时,整幅图片被分成许多小块,称为tiles(在OpenCV中tiles的大小默认是8x8),然后再对每一个小块分别进行直方图均衡化。如果有噪声的话,噪声会被放大。为了避免这种情况的出现要使用对比度限制。对于每个小块来说,如果直方图中的bin超过对比度的上限的话,就把其中的像素点均匀分散到其他bins中,然后在进行直方图均衡化。最后使用双线性差值,对每一小块进行拼接

2.API:

cv.createCLAHE(clipLimit,tileGridSize)

参数:

clipLimit:对比度限制,默认是40

tileGridSize:分块的大小,默认8*8

3.示例:

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
img=cv.imread('cat.png',0)
#创建一个自适应均衡化对象
cl=cv.createCLAHE(2.0,(8,8))
#将其应用于图像
clahe=cl.apply(img)
plt.imshow(clahe,cmap=plt.cm.gray)
plt.show()

 【OpenCV--直方图】【OpenCV--直方图】文章来源地址https://www.toymoban.com/news/detail-449492.html

到了这里,关于【OpenCV--直方图】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV10-图像直方图:直方图绘制、直方图归一化、直方图比较、直方图均衡化、直方图规定化、直方图反射投影

    图像直方图就是统计图像中每个灰度值的个数,之后将灰度值作为横轴,以灰度值个数或者灰度值所占比率作为纵轴的统计图。通过直方图,可以看出图像中哪些灰度值数目较多,哪些较少,可以通过一定的方法将灰度值较为集中的区域映射到较为稀疏的区域,从而使图像在

    2024年01月16日
    浏览(53)
  • 【OpenCV • c++】自定义直方图 | 灰度直方图均衡 | 彩色直方图均衡

      直方图广泛应用于很多计算机视觉处理当中。通过标记帧与帧之间显著的边缘和颜色的变化,可以检测视频中的场景变化。在每个兴趣点设置一个有相似特征的直方图所构成的“标签”,可以用来标记各种不同的事情,比如图像的色彩分布,物体边缘梯度模板等等。是计

    2024年02月08日
    浏览(52)
  • 【OpenCV • c++】直方图计算 | 绘制 H-S 直方图 | 绘制一维直方图 | 绘制 RGB 三色直方图

      直方图广泛应用于很多计算机视觉处理当中。通过标记帧与帧之间显著的边缘和颜色的变化,可以检测视频中的场景变化。在每个兴趣点设置一个有相似特征的直方图所构成的“标签”,可以用来标记各种不同的事情,比如图像的色彩分布,物体边缘梯度模板等等。是计

    2024年02月09日
    浏览(55)
  • 一、直方图相关学习

    表示图像中每个灰度级别的像素数量。用于分析图像的亮度分布情况。 参数介绍 示例 B GR直方图 是一种用于可视化彩色图像中蓝色(Blue)、绿色(Green)和红色(Red)三个通道的像素值分布情况的工具。了解图像中颜色的分布情况。通过分析BGR直方图,可以得知图像中某个

    2024年02月22日
    浏览(37)
  • 【opencv】教程代码 —Histograms_Matching(2)计算直方图、直方图比较、直方图均衡、模板匹配...

    计算直方图 直方图比较 图像进行直方图均衡化处理 模板匹配 1. calcHist_Demo.cpp 计算直方图 这段代码的功能是加载图像,分离图像的三个颜色通道,然后分别计算这三个通道的直方图,绘制出来并显示结果。直方图是图像中像素值分布的图形表示,可以用于图像分析或图像处

    2024年04月11日
    浏览(51)
  • opencv-2D直方图

    cv2.calcHist() 是 OpenCV 中用于计算直方图的函数。它可以计算一维或多维直方图,用于分析图像中像素值的分布。 基本的语法如下: 参数说明: images : 输入图像, 可以是单通道或多通道图像 。在计算多通道图像的直方图时,要将通道分别传递给 channels 参数。 channels : 要考虑

    2024年02月20日
    浏览(40)
  • 【OpenCV--直方图】

    目录 一、直方图是什么? 1.描述: 2.相关术语: 二、直方图的计算和绘制 三、掩膜的应用 四、直方图均衡化: 五、自适应的直方图均衡化 1.描述: 1直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的bin(直条/组距)当中。bin的数值可以是梯度、方

    2024年02月05日
    浏览(44)
  • opencv直方图

    在OpenCV中,直方图是一个重要的图像分析工具,它可以提供关于图像亮度分布的详细信息。OpenCV提供了多种方法来计算和操作图像的直方图。 基本概念 直方图是一个离散函数,它将图像中的像素值映射到一个连续的区间上,并计算每个区间内像素的数量。对于灰度图像,直

    2024年04月28日
    浏览(42)
  • OpenCV(十八):图像直方图

    目录 1.直方图统计 2.直方图均衡化 3.直方图匹配 1.直方图统计        直方图统计是一种用于分析图像或数据的统计方法,它通过统计每个数值或像素值的频率分布来了解数据的分布情况。 在OpenCV中,可以使用函数 cv::calcHist() 来计算图像的直方图。 calcHist() 函数的原型如下

    2024年02月10日
    浏览(65)
  • OpenCV:图像直方图计算

    图像直方图为图像中像素强度的分布提供了有价值的见解。通过了解直方图,你可以获得有关图像对比度、亮度和整体色调分布的信息。这些知识对于图像增强、图像分割和特征提取等任务非常有用。 本文旨在为学习如何使用 OpenCV 执行图像直方图计算提供清晰且全面的指南

    2024年02月16日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包