直方图

OpenCV学习笔记(11)

自古美人都是妖i 提交于 2020-03-01 13:59:11
本次要整理的内容仍然是与直方图相关的操作,分别是直方图反向投影,和基于直方图反向投影的简易视频实时追踪。这两个部分的内容是息息相关的,第一部分是基础知识点,而第二部分是在此基础知识上的应用,首先开始整理直方图反向投影的内容。 直方图反向投影 从之前的笔记中我们已经了解到直方图是一幅图像的像素统计,那么其中必然会包含图像的某些信息,而且针对图像中的某一特定区域,其统计信息肯定在整体的直方图中也会有所体现,因此可以有这样一种想法:如果我们想从一张图像中找出一块我们感兴趣的区域,就可以先将该区域截取下来作为寻找的模板,并计算模板的直方图,最后在原图像中寻找具有该模板直方图特征的区域,那就是我们感兴趣的区域。这其实就是直方图反向投影的思想,简单来说,所谓反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的该特征。具体实现代码如下: Mat model , test_image ; model = imread ( "D:\\opencv_c++\\opencv_tutorial\\data\\images\\sample.png" ) ; imshow ( "model" , model ) ; test_image = imread ( "D:\\opencv_c++\\opencv_tutorial\\data\\images\\target.png" ) ;

opencv图像处理之直方图

末鹿安然 提交于 2020-02-29 14:10:44
文章目录 0.什么是直方图 1.整幅图像的直方图 2.部分图像的直方图(使用mask) 0.什么是直方图 通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的x 轴是灰度值(0 到255),y 轴是图片中具有同一个灰度值的点的数目。 统计直方图的几个重要参数: BINS : 直方图显示了每个灰度值对应的像素数。如果像素值为0到255,你就需要256 个数来显示上面的直方图。但是,如果你不需要知道每一个像素值的像素点数目的,而只希望知道两个像素值之间的像素点数目怎么办呢?举例来说,我们想知道像素值在0 到15 之间的像素点的数目,接着是16 到31,…,240 到255。我们只需要16 个值来绘制直方图。 那到底怎么做呢?你只需要把原来的256 个值等分成16 小组,取每组的总和。而这里的每一个小组就被成为BIN。第一个例子中有256 个BIN,第二个例子中有16 个BIN。在OpenCV 的文档中用 histSize 表示BINS。 DIMS : 表示我们收集数据的参数数目。在本例中,我们对收集到的数据只考虑一件事:灰度值。所以这里就是1。 RANGE : 就是要统计的灰度值范围,一般来说为[0,256],也就是说所有的灰度值。 1.整幅图像的直方图 代码速记: plt.hist() cv2.calcHist() np.histogram() np.bincount()

直方图中最大的矩形

霸气de小男生 提交于 2020-02-29 01:32:42
题目: 直方图是由在公共基线处对齐的一系列矩形组成的多边形。 矩形具有相等的宽度,但可以具有不同的高度 链接 。 图不知道怎么弄 例如,图例左侧显示了由高度为2,1,4,5,1,3,3的矩形组成的直方图,矩形的宽度都为1: 通常,直方图用于表示离散分布,例如,文本中字符的频率。 现在,请你计算在公共基线处对齐的直方图中最大矩形的面积。 图例右图显示了所描绘直方图的最大对齐矩形。 输入格式 输入包含几个测试用例。 每个测试用例占据一行,用以描述一个直方图,并以整数n开始,表示组成直方图的矩形数目。 然后跟随n个整数h1,…,hn。 这些数字以从左到右的顺序表示直方图的各个矩形的高度。 每个矩形的宽度为1。 同行数字用空格隔开。 当输入用例为n=0时,结束输入,且该用例不用考虑。 输出格式 对于每一个测试用例,输出一个整数,代表指定直方图中最大矩形的区域面积。 每个数据占一行。 请注意,此矩形必须在公共基线处对齐。 数据范围 1≤n≤100000, 0≤hi≤1000000000 输入: 7 2 1 4 5 1 3 3 4 1000 1000 1000 1000 0 输出: 8 4000 分析,可取一个长方形条,然后该长方形条的左右两边高度大于等于它的即可把该矩形面积扩大,故转换为求该长方形条左右两边第一个比它小的长方形条位置;即为单调栈;这里运用两个单调栈,有很多写法,我的写法如下:

matplotlib--hist直方图

自古美人都是妖i 提交于 2020-02-23 03:41:25
matplotlib . pyplot . hist ( x , bins = None , density = None , alpha , histtype = 'bar' , color = None ) hist的常用参数介绍 x:输入数据,直方图对数据x分区间统计 bins:统计的区间分布,形如 [0,2,4,6],则统计x在区间[0,2]、[2,4]、[4,6]的频数 density:bool型,默认为false,即显示频数,true显示频率,注意频率的计算方法是 该 区 间 频 数 样 本 总 数 ⋅ 区 间 宽 度 \frac{该区间频数}{样本总数\cdot 区间宽度} 样 本 总 数 ⋅ 区 间 宽 度 该 区 间 频 数 ​ histtype: 直方图形状,可选{‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}之一,默认为bar alpha:透明度,0表示完全透明 Example import numpy as np import matplotlib . pyplot as plt lim = 4 width = 0.4 x = np . random . normal ( 0 , 1 , 10000 ) # 生成均值为0,方差为1的正太分布点10000个 bins = np . arange ( - lim , lim

基础学习笔记之opencv(4):直方图使用学习

我与影子孤独终老i 提交于 2020-02-13 07:37:56
目的:   直方图在cv领域到处可见,因为其功能在cv算法的实现中必不可少。Opencv库中也集成了关于直方图的不少函数,比如直方图的计算,均衡,归一化,相似度比较等等。 为了体验这些函数,做了个小实验,功能是:打开摄像头,鼠标选定一个框,框内图像作为标准图像,计算出其直方图并显示出来;然后继续鼠标选定框,该框内的图像的直方 图与标准图像的进行相似度计算,计算结果在终端输出,数值越大表示相似度越大。   工程环境:opencv2.3.1+vs2010。 工程代码: 1 // hist_test.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <opencv2/core/core.hpp> 6 #include <opencv2/imgproc/imgproc.hpp> 7 #include <opencv2/highgui/highgui.hpp> 8 #include <iostream> 9 #include <stdio.h> 10 11 using namespace cv; 12 using namespace std; 13 14 int nFrame_num=0; 15 bool pause=false; 16 bool tracking=false; 17 Rect preselectROI

OpenCV--直方图

旧街凉风 提交于 2020-02-11 17:02:50
直方图 cv2.calcHist(images,channels,mask,histSize,ranges) - images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img] - channels: 同样用中括号括起来,它会告诉函数我们统幅图像的直方图。如果输入图像是灰度图,它的值就是[0]如果是彩色图像 的传入的参数可以是 [0][1][2] 它们分别对应着 BGR。 - mask: 掩模图像。统整幅图像的直方图就把它为 None。但是如果你想统图像某一分的直方图的你就制作一个掩模图像并使用它。 - histSize:BIN 的数目。也应用中括号括来 - ranges: 像素值范围常为 [0256] img = cv2.imread('cat.jpg',0) #0表示灰度图 hist = cv2.calcHist([img],[0],None,[256],[0,256]) hist.shape #print(hist) #cv_show(hist,"hist") 效果: (256, 1) plt.hist(img.ravel(),256); #数据集扁平化 plt.show() 效果: img = cv2.imread('cat.jpg') color = ('b','g','r') for i,col in

opencv之直方图处理

∥☆過路亽.° 提交于 2020-02-08 19:39:28
直方图是图像处理过程中的一种非常重要的分析工具。 是图像内灰度值的统计特性与灰度值之间的函数,直方图统计图像内各个 灰度级出现的次数 需要注意三个概念: DIMS : 表示绘制直方图时,收集的参数的数量,一般情况下,直方图中收集的数据只有一种,就是灰度级,因此该值为1 RANGE :表示统计的灰度级的范围,一般为[0 . 255] . 0对应的时黑色,255对应的时白色 BINS : 参数子集的数目,在处理数据的过程中,有时需要将众多的数据划分为若干个组,在进行分析 该图中,BINS为6,RANGE为[2,6] python 的模块matplotlib.pyplot中的hist()函数能方便的绘制直方图, 函数形式为 matplotlib.pyplot.hist( x , BINS) x,为数据源 ,必须是一维的,图像通常都是二维的, 可以通过函数ravel()来将二维数组降成一维的 例如:图像x 23 34 14 54 63 23 45 25 76 对其使用函数ravel() y = x.ravel() 得到y为: 23 34 14 54 63 23 45 25 76 BINS为灰度级的分组情况 绘制图像的直方图 1 import cv2 2 import matplotlib.pyplot as plt 3 o = cv2.imread("/home/miao/dog.jpg"

数字图像处理与分析---指纹图像增强

£可爱£侵袭症+ 提交于 2020-02-08 02:44:10
•​ 图1是一幅包含指纹的真实图像,请使用所学的图像处理技术进行处理,满足下面的要求: •​ 1. 使图像中的指纹更加清晰; •​ 2. 考虑到冬季皮肤粗糙的情况(成像时存在噪声,请自行添加噪声点),尽可能去除其中的噪声。 图1 基础题图像 目录 1需求分析... 3 1.1给指纹图像加噪声点... 3 1.2 指纹图像去除噪点... 3 1.3 图片转为灰度图... 4 1.4 灰度直方图... 4 1.5 图像分割... 4 1.6断点连接... 5 1.7 使得指纹图像平滑... 5 2 实现代码... 5 2.1 添加高斯噪声... 5 2.2 去除高斯噪声... 6 2.3 转换为灰度图... 6 2.4 计算灰度直方图... 7 2.5 指纹断点连接处理... 7 2.6 图片进行形态学开操作... 8 3 实验结果及分析... 8 4 附录... 13 4.1 代码目录... 13 1需求分析 根据题目要求,使得图像中的指纹更加清晰。给图像指纹加噪声点,尽可能去除其中的噪点。 1.1给 指纹图像加噪声点 使用高斯噪声给图片添加噪声点,高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性

图像特征提取三大法宝:HOG特征,LBP特征,Haar特征

喜欢而已 提交于 2020-02-07 04:46:25
图像特征提取三大法宝:HOG特征,LBP特征,Haar特征 (一)HOG特征 1、HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主。 (1)主要思想: 在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。(本质:梯度的统计信息,而梯度主要存在于边缘的地方)。 (2)具体的实现方法是: 首先将图像分成小的连通区域,我们把它叫细胞单元。然后采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图组合起来就可以构成特征描述器。 (3)提高性能: 把这些局部直方图在图像的更大的范围内(我们把它叫区间或block)进行对比度归一化(contrast-normalized),所采用的方法是:先计算各直方图在这个区间(block)中的密度,然后根据这个密度对区间中的各个细胞单元做归一化

目标检测的图像特征提取之(二)LBP特征

穿精又带淫゛_ 提交于 2020-02-07 04:45:06
LBP( Local Binary Pattern ,局部二值模式)是一种用来描述图像 局部纹理特征 的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由 T. Ojala, M.Pietikäinen, 和 D. Harwood 在 1994 年提出,用于纹理特征提取。而且,提取的特征是图像的局部的纹理特征; 1 、 LBP 特征的描述 原始的 LBP 算子定义为在 3*3 的窗口内,以窗口中心像素为阈值,将相邻的 8 个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为 1 ,否则为 0 。这样, 3*3 邻域内的 8 个点经比较可产生 8 位二进制数(通常转换为十进制数即 LBP 码,共 256 种),即得到该窗口中心像素点的 LBP 值,并用这个值来反映该区域的纹理信息。如下图所示: LBP 的改进版本: 原始的 LBP 提出后,研究人员不断对其提出了各种改进和优化。 ( 1 )圆形 LBP 算子: 基本的 LBP 算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求, Ojala 等对 LBP 算子进行了改进,将 3 × 3 邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的 LBP 算子允许在半径为 R