OpenCV(7)-图像直方图】的更多相关文章

背景 图像的直方图是衡量图像像素分布的一种方式,可以通过分析像素分布,使用直方图均衡化对图像进行优化,让图像变的清晰. opencv官方对图像直方图的定义如下: 直方图是图像中像素强度分布的图形表达方式. 它统计了每一个强度值所具有的像素个数. 一.直方图计算的原理 一副图像实际上就是一个数字矩阵. 3x3的灰度图像由9个像素组成,每个像素都取值0-255中的一个值,0表示黑色,255表示白色,中间值是介于黑色和白色之间的灰度值. 如下以一个高度为3,宽度为3的图片为例说明直方图的计算. 定义一…
直方图定义可参考这里.图像的直方图用来表示图像像素的统计信息,它统计了图像每一个通道(如果是多通道)中,每个像素的个数(比例). 计算直方图 OpenCV提供了直接计算直方图的函数 void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool…
__author__ = "WSX" import cv2 as cv import numpy as np from matplotlib import pyplot as plt def plot( img): plt.hist(img.ravel() , 256 ,[0 ,256]) print(img.ravel()) #统计频次 plt.show() def hist( img ):#反应图像的主要特征 color = ("blue" ,"gre…
新版本对直方图不再使用之前的histogram的形式,而是用统一的Mat或者MatND的格式来存储直方图,可见新版本Mat数据结构的优势. C++: void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, intdims, const int* histSize, const float** ranges, bool uniform=true, bo…
// 直方图均衡化 Mat gray, dst; cvtColor(src, gray, COLOR_BGR2GRAY); equalizeHist(gray, dst); imshow("gray", gray); imshow("equalizeHist", dst);…
OpenCV绘制图像直方图,版本2.4.11 直方图可展示图像中的像素分布,是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数.可以借助观察该直方图了解需要如何调整亮度分布.这种直方图中,横坐标的左侧为纯黑.较暗的区域,而右侧为较亮.纯白的区域.因此,一张较暗图片的图像直方图中的数据多集中于左侧和中间部分:而整体明亮.只有少量阴影的图像则相反. 一个例子 ---------------------- /* 绘制灰度直方图 */ #include <cv.h> #include…
void hist_compare(Mat src1, Mat src2) { int histSize[] = { 256, 256, 256 }; int channels[] = { 0, 1, 2 }; Mat hist1, hist2; float c1[] = { 0, 255 }; float c2[] = { 0, 255 }; float c3[] = { 0, 255 }; const float* histRanges[] = { c1, c2, c3 }; calcHis…
正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射. 我们以人脸检测举例,在人脸检测中,我们第一步往往需要先提取图像中皮肤区域来缩小人脸的检测范围,这一般获得皮肤的颜色范围还需要定义阈值并不断的调整,实际中参数太多而不容易控制. 这里我们就可以考虑用直方图的反射映射. 1,收集人脸皮肤样本. 2,拼合样本并计算其颜色直方图. 3,将得到的样本颜色直方图反射映射到待检测的图片中,然后进行阈值化即可. 这里…
一.图像直方图的概念 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比. 图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征.在实际工程中,图像直方图在特征提取.图像匹配等方面都有很好的应用. 二.利用OpenCV计算图像的直方图 OpenCV中计算图像直方图像函数是calcHist,它的参数比较多,下面分析一下它的接口和用法. void calcH…
OpenCV成长之路:图像直方图的应用 2014-04-11 13:57:03 标签:opencv 图像 直方图 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ronny.blog.51cto.com/8801997/1394118 正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射. 我们以人脸检测举例,在人脸检测中,我们第一步往…
http://ronny.blog.51cto.com/8801997/1394115 2014-04-11 13:47:27 标签:opencv 直方图 统计表 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ronny.blog.51cto.com/8801997/1394115 一.图像直方图的概念 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种…
直方图简介:图像的直方图是用来表现图像中亮度分布的直方图,给出的是图像中某个亮度或者某个范围亮度下共有几个像素.还不明白?就是统计一幅图某个亮度像素数量.比如对于灰度值12,一幅图里面有2000 个像素其灰度值为12,那么就能够统计12这个亮度的像素为2000个,其他类推.参考:https://blog.csdn.net/xierhacker/article/details/52605308 一.安装matplotlib 要画直方图必须要安装matplotlib库,Matplotlib 是一个…
直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均衡化作用:用来增强对比度. 这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候.通过这种方法,亮度可以更好地在直方图上分布.这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能. 这种方法对于背景和前景都太亮或者太…
1.直方图 一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征.图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少.图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率. 不过通常会将纵坐标归一化到[0,1][0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数.灰度直方图的计算公式如下: 其中 rk是像素的灰度级 nk是具有灰度rk的像素个数 M…
直方图概述 简单来说,直方图就是对数据进行统计的一种方法,这些数据可以是梯度.方向.色彩或任何其他特征.它的表现形式是一种二维统计表,横纵坐标分别是统计样本和该样本对应的某个属性的度量. 计算直方图:calcHist 函数 calcHist 函数用于计算一个或多个阵列的直方图. void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims…
直接用matplotlib画出直方图 def plot_demo(image): plt.hist(image.ravel(), 256, [0, 256]) # image.ravel()将图像展开,256为bins数量,[0, 256]为范围 plt.show() 图像直方图 def image_hist(image): color = ('blue', 'green', 'red') for i, color in enumerate(color): # 计算出直方图,calcHist(i…
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python 图像处理 OpenCV (3):图像属性.图像感兴趣 ROI 区域及通道处理」 「Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间」 「Python 图像处理 OpenCV (5):图像的几何变换」 「Python 图像处理 OpenCV (6):图像的阈值处理」 「Py…
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1,如何提高图像像素 对曝光过度或者逆光拍摄的图片可以通过直方图均衡化的方法用来增强局部或者整体的对比度. 对于相机采集的原始图像经常会出现一种现象,即图像所有像素的灰度值分布不均匀,而是集中在某一特定的小区域,导致图像中的所有信息的灰度值都很接近,即对比度差,很难从图像中分辨出某一特征的信息.而质量较…
引言 在图像处理中,对于直方图这个概念,肯定不会陌生.但是其原理真的可以信手拈来吗? 本文篇幅有点长,在此列个目录,大家可以跳着看: 分析图像直方图的概念,以及opencv函数calcHist()对于RGB图像的直方图的绘制 在其基础上自已定义函数实现对灰度图像直方图的简单绘制 直方图均衡化 直方图的反向投影 图像直方图分析以及opencv函数实现 (一)直方图的介绍 直方图到底可以干什么呢?我觉得最明显的作用就是有利于很直观的对图像进行分析了,直方图就像我们常用的统计图,直方图可以用来描述各种…
图像直方图使用到:python-opencv.matplotlib.numpy def plot_demo(image): print(len(image.ravel())) #统计image3通道的像素个数 # numpy的ravel函数功能是将多维数组降为一维数组image.ravel() = 高像素320*宽像素240*通道数3 = 230400 """ hist函数原型:hist(x, bins=None, range=None, density=None, weig…
在OpenCV中,也可以对三通道的图像,比如BGR,HSV等计算直方图.方法和计算单通道图像直方图相似,下面的代码描述了如何计算一个BGR三通道图像的直方图,需要注意的是,因为是三通道,每个通道取值都是[0,255],所以bin的数目达到了256*256*256,这时如果使用普通三维矩阵输出直方图结果,需要很大的空间,所以我们通常使用稀疏矩阵来保存输出结果.因为稀疏矩阵只保存非零值,这样可以节省存储空间. int main( int argc, char** argv )     {     M…
直方图是对数据的统计,并将统计结果分布于一系列预定义的槽中.这里的数据不仅仅指的是灰度值,它可以是任何能有效描述图像特征的数据,比如图像梯度等等. 假设有一个矩阵包含一张图像的信息 (灰度值 0-255),我们已经知道灰度值范围是0-255,假设有16个槽(bin),则有下面的划分: 我们可以统计落入每个槽中像素的数目,并用直方图的形式显示出来. 让我们再来了解一下直方图的一些具体细节: dims: 需要统计的特征的数目, 在上例中, dims = 1 因为我们仅仅统计了灰度值(灰度图像). b…
原文链接:http://blog.csdn.net/xiaowei_cqu/article/details/7600666 如有疑问或者版权问题,请移步原作者或者告知本人. 灰度直方图是数字图像中最简单且有用的工具,这一篇主要总结OpenCV中直方图CvHistogram的结构和应用. 灰度直方图的定义 灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率). 一维直方图的结构表示为         高维直…
pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表示如果像素值大于(有时小于)阈值则要给出的值. OpenCV提供不同类型的阈值,它由函数的第四个参数决定. 不同的类型是: cv2.THRESH_BINARY 如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0 cv.THRESH_B…
1.直方图的概念 灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像元的个数.确定图像像素的灰度值范围,以适当的灰度间隔为单位将其划分为若干等级,以横轴表示灰度级,以纵轴表示每一灰度级具有的像素数或该像素占总像元数的比例值,做出的条形统计图即为灰度直方图.灰度直方图:横坐标是灰度,纵坐标是该灰度在图像中出现的次数. 图像直方图可以表示图像中亮度分布,能借助直方图了解需要如何调整亮度分布,直方图中左侧表示黑色.较暗的区域,右侧表示白色.较亮的区域.计算机视觉领域常借助直方图来实现图像的二值化…
title: "Python实现图像直方图均衡化算法" date: 2018-06-12T17:10:48+08:00 tags: [""] categories: ["python"] 效果图 代码 #!/usr/bin/env python3 # coding=utf-8 import matplotlib.image as mpimg from matplotlib import pyplot as plt import sys impor…
Java基于opencv实现图像数字识别(五)-投影法分割字符 水平投影法 1.水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像): 2.选出一个最优的阀值,根据比这个阀值大或小,用一个数组记录相应Y轴的坐标: 3.因为是水平切割我们只需要Y轴的切割点即可,宽度默认图像的宽,高度可以用相邻的切割点相减得到: 4.优化切割点,把切割点靠近的都清除掉 5.设置感应区的区域,切割图片 垂直投影法和水平投影法类似,对比思考一下 因为我做的是表格的切割,你如果想实现验证码的切割,或者…
Java基于opencv实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量Mat,非常的简单,这里给出代码 public class ImageUtils { private static final int BLACK = 0; private static final int WHITE = 255; private Mat mat; /** * 空参构造函数 */…
Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字节存放灰度值(又称强度值.亮度值),灰度范围为0-255.一般常用的是加权平均法来求像素点的灰度值,opencv开发库所采用的一种求灰度值算法如下: :)Gray = 0.072169 * B + 0.715160 * G + 0.212671 * R 有两种方式可以实现灰度化,如下 方式1 @Te…
Java基于opencv实现图像数字识别(二)-基本流程 做一个项目之前呢,我们应该有一个总体把握,或者是进度条:来一步步的督促着我们来完成这个项目,在我们正式开始前呢,我们先讨论下流程. 我做的主要是表格中数字的识别,但这个不是重点.重点是通过这个我们可以举一反三,来实现我们自己的业务. 图像的识别主要分为两步:图片预处理和图像识别:这两步都很重要 图像预处理: 1. 图像灰度化:二值化 2. 图像降噪,去除干扰线 3. 图像腐蚀.膨胀处理 4. 字符分割 5. 字符归一化 图像识别: 1.…