python OpenCV学习笔记之绘制直方图的方法
本篇文章主要介绍了python OpenCV学习笔记之绘制直方图的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
官方文档 – https://docs.opencv.org/3.4.0/d1/db7/tutorial_py_histogram_begins.html
直方图会让你对图像的强度分布有一个全面的认识。它是一个在x轴上带有像素值(从0到255,但不总是),在y轴上的图像中对应的像素数量的图。
这只是理解图像的另一种方式。通过观察图像的直方图,你可以直观地看到图像的对比度、亮度、强度分布等。现在几乎所有的图像处理工具都提供了直方图的特性。下面是剑桥彩色网站的图片,建议去访问这个网站,了解更多细节。
你可以看到图像和它的直方图。(这个直方图是用灰度图像绘制的,而不是彩色图像)。直方图的左边部分显示了图像中较暗像素的数量,右边区域显示了更明亮的像素。从直方图中可以看到,深色区域的像素数量比亮色区域更多,而中间色调的数量(中值大约在127左右)则少得多。
直方图
现在我们已经知道了什么是直方图,我们可以看看如何找到它。OpenCV和Numpy都有内置的功能。在使用这些函数之前,我们需要了解一些与直方图相关的术语。
BINS:上面的直方图显示了每个像素值的像素数,从0到255。您需要256个值来显示以上的直方图。但是,考虑一下,如果您不需要单独查找所有像素值的像素数量,而是在一个像素值区间内的像素数量,该怎么办?例如,你需要找到介于0到15之间的像素数,然后是16到31……240到255。您只需要16个值来表示这个直方图。OpenCV Tutorials on histograms中展示了这个例子。
所以你要做的就是把整个直方图分成16个子部分,每个子部分的值是所有像素数的和。每个子部分都被称为“BIN”。在第一种情况下,BINS的数量是256(每个像素一个),而在第二种情况下,它只有16个。在OpenCV文档中,用术语 histSize 表示 BINS。
DIMS:它是我们收集数据的参数的个数。在这种情况下,我们收集的数据只有一件事,强度值。所以这里是1。
RANGE:它是你想测量的强度值的范围。通常,它是 [ 0,256 ],也就是所有的强度值。
OpenCV中直方图的计算
现在我们使用
cv.calcHist()函数来找到直方图。让我们熟悉一下这个函数及其参数:
cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
images:它是uint8类型或float32的源图像。它应该用方括号括起来,也就是”
或者你可以用正常的matplotlib,这对BGR的情节很有帮助。为此,您需要首先找到直方图数据。试试下面的代码:
import numpy as np import cv2 as cv from matplotlib import pyplot as plt img = cv.imread('home.jpg') color = ('b', 'g', 'r') for i, col in enumerate(color): histr = cv.calcHist(
你可以从上面的图中扣除,蓝色在图像中有一些高值区域(很明显,它应该是由天空引起的)
2、使用OpenCV
这里,你可以调整直方图的值和它的bin值,让它看起来像x,y坐标,这样你就可以用cv.line()或cv.polyline()函数来绘制它,从而生成与上面相同的图像。这已经是OpenCV-Python2官方的样本了。检查sampl/python/hist.py的代码。
应用遮罩
我们用
cv.calcHist()函数来找一张完整的图片的直方图。但是我们只要图片的一部分的直方图呢?在你想要找到的区域中,创建一个带有白色的遮罩图像。然后把它作为遮罩。img = cv.imread('home.jpg', 0) # create a mask mask = np.zeros(img.shape[:2], np.uint8) mask[100:300, 100:400] = 255 masked_img = cv.bitwise_and(img, img, mask=mask) #Calculate histogram with mask and without mask Check third argument for mask hist_full = cv.calcHist(以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- python OpenCV学习笔记(二十一):绘制直方图
- 【OpenCV学习笔记】二十一、直方图计算及绘制(一)
- 【OpenCV学习笔记】二十二、直方图计算及绘制(二)
- Opencv学习笔记——绘制图像的像素直方图
- python OpenCV学习笔记实现二维直方图
- Python OpenCV学习笔记之:灰度图像的直方图计算
- 【caffe学习笔记之5】Win10系统下Caffe的Python接口设置方法并绘制网络结构图
- Python OpenCV学习笔记之:图像直方图反向投影(backprojection)原理简单实现
- python OpenCV学习笔记直方图反向投影的实现
- Opencv Python版学习笔记(一)图像直方图
- opencv学习笔记9 直方图均衡化并绘制直方图
- Python OpenCV学习笔记之:计算彩色图像各通道的直方图及图像区域直方图
- opencv 2.x学习笔记(十三)绘制直方图
- python OpenCV学习笔记(二十四):直方图反向投影
- opencv学习笔记(二十九)绘制一个RGB三色直方图
- OpenCV 2 学习笔记(15): 绘制图像直方图
- python OpenCV学习笔记(二十三):二维直方图
- Python OpenCV学习笔记之:图像直方图反向投影
- 【基于C++和Python的Opencv3学习笔记之基本图形的绘制】
- python_openCV学习笔记(1) 绘制openCV的logo