Opencv中直方图函数calcHist】的更多相关文章

calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解的是第6,7,8个参数dims.histSize和ranges.以前一直都是想当然认为,该函数可以一次统计多张图片每个通道的灰度值数据,实际上calcHist函数一次只能统计一个通道上的直方图.我估计许多同学都犯过和我类似的错误,认为第5个参数hist,可以根据dims设定维度,比如dims=3,则输出的hist的维度就是3,并且会想当然的…
calchist函数需要包含头文件 #include <opencv2/imgproc/imgproc.hpp> 函数声明(三个重载 calchist函数): //! computes the joint dense histogram for a set of images. CV_EXPORTS void calcHist( const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray h…
计算直方图calcHist 直方图是对数据集合的统计 ,并将统计结果分布于一系列提前定义的bins中.这里的数据不只指的是灰度值 ,统计数据可能是不论什么能有效描写叙述图像的特征. 如果有一个矩阵包括一张图像的信息 (灰度值 0-255): gray 既然已知数字的范围包括256个值, 我们能够将这个范围切割成子区域(称作 bins),如: bins 然后再统计掉入每个bin_{i}的像素数目.採用这一方法来统计上面的数字矩阵,我们能够得到下图( x轴表示 bin, y轴表示各个bin中的像素个…
一.函数原型 ​该函数参数angleInDegrees默认为false,即弧度,当置为true时,则输出为角度. phase函数根据函数来计算角度,计算精度大约为0.3弧度,当x,y相等时,angle为0. 数学上函数atan2为: 该函数的值域为,可以通过对负数结果加的方法,将函数的结果映射到范围内. 而c++中atan2函数是通过正切值返回弧度的,并通过判断x,y的正负决定象限,因此c++中atan2函数值域是从-Pi到Pi的. 二.小实验 Mat mat1(Size(, ), CV_32F…
转自:https://blog.csdn.net/u012566751/article/details/77046445 一篇很好的介绍threshold文章: 图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果.在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓.OpenCV中提供了函数cv::threshold();   注意:作者采用OpenCV 3.0.0   函数原型   参数说明 src…
一.前言 经过两个星期的努力,一边学习,一边写代码,初步完成了毕业论文系统的界面和一些基本功能,主要包括:1 数据的读写和显示,及相关的基本操作(放大.缩小和移动):2 样本数据的选择:3 数据归一化处理:4 绘制光谱曲线:5 获取波段信息.接下来的工作主要是完成遥感影像分类的相关算法.这部分主要是数学计算,尤其是矩阵的相关运算和操作.为此,系统的学习和了解了openCV库中常用的矩阵操作函数,记录下来,方便以后查阅. 二.openCV函数 1 reshape C++: Mat Mat::res…
直方图均衡化就是调整灰度直方图的分布,即将原图中的灰度值映射为一个新的值.映射的结果直观表现是灰度图的分布变得均匀,从0到255都有分布,不像原图那样集中.图像上的表现就是对比度变大,亮的更亮,暗的更暗. 映射算法是计算灰度图的累积函数,并将其归一化.最后由累计函数映射出新的灰度值.这个算法其他的博客都有描述.我这里谈谈我对这个算法的理解. 通过这种算法会有什么效果?首先灰度的大小关系是不会变化的,但是新的灰度范围和这种灰度的像素数目相关.原本占据低区域和高区域的像素,虽然很少,但是占据了(0~…
今天,一个朋友想使用我的SSE优化Demo里的双线性插值算法,他已经在项目里使用了OpenCV,因此,我就建议他直接使用OpenCV,朋友的程序非常注意效率和实时性(因为是处理视频),因此希望我能测试下我的速度和OpenCV相比到底那一个更有速度优势,恰好前一段时间也有朋友有这方面的需求,因此我就随意编写了一个测试程序,如下所示: IplImage *T = cvLoadImage("F:\\1.JPG"); IplImage *SrcImg = cvCreateImage(cvSiz…
注意:这个函数是HighGUI中唯一能够获取和操作事件的函数,所以在一般的事件处理中,它需要周期地被调用,除非HighGUI被用在某些能够处理事件的环境中.比如在MFC环境下,这个函数不起作用.…
1.CV_Assert函数作用: CV_Assert()若括号中的表达式值为false,则返回一个错误信息.…
The OpenCV GPU module is a set of classes and functions to utilize GPU computational capabilities. It is implemented using NVIDIA* CUDA* Runtime API and supports only NVIDIA GPUs. 1.      getCudaEnableDeviceCount:returns the number of installed CUDA-…
在Mat矩阵类的成员函数中copyTo(roi , mask)函数是非常有用的一个函数,尤其是后面的mask可以实现蒙版的功能,我们用几个实例来说明它的作用.我们要注意mask的数据类型,必须是CV_8U,且通道数或者是1,或者与roi一致. 首先我们令mask为尺寸与roi一致的1矩阵: int main() { Mat img1=imread(); Mat img2=imread(); imshow("initial img1",img1); Mat roi=img1(Rect(,…
/*M/////////////////////////////////////////////////////////////////////////////////////// // // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. // // By downloading, copying, installing or using the software you agree to this licen…
图像旋转和平移是图像处理中常用的一种操作,opencv2和opencv3中对图像的旋转和平移都是通过仿射变换函数cv::warpAffine()来实现的. 1.图像的旋转 图像的旋转具体实现分为两步:先根据旋转角度和旋转中心获取旋转矩阵:然后根据旋转矩阵进行仿射变换,即可实现任意角度和任意中心的旋转效果.旋转矩阵的形式如下: 其中, 具体代码如下: cv::Mat src = cv::imread("lenna.jpg"); cv::Mat dst; //旋转角度 ; cv::Size…
Use the OpenCV function :copy_make_border:`copyMakeBorder <>` to set the borders (extra padding to your image).The explanation below belongs to the book Learning OpenCV by Bradski and Kaehler. In our previous tutorial we learned to use convolution t…
转自:https://blog.csdn.net/fanjiule/article/details/81606596 第一步,功能说明:namedWindow()的功能就是新建一个显示窗口.可以指定窗口的类型. 第二步,结果图显示:我们展示两张图,第一张窗口与图片大小相等.第二张窗口大小被拖动图片高度变小. 图1: 图2: 第三步,API详解:原型:void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE) ; 参数1:新…
//俗话说:好记性不如烂笔头 //用到opencv 中的函数时往往会一时记不起这个函数的具体参数怎么设置,故在此将常用函数做一汇总: Mat srcImage = imread("C:/Users/Administrator/Desktop/车牌识别/车牌图像库/1.jpg");//读入图像函数 imshow("原图",srcImage);//显示图像函数 imwrite("图3.jpg",imageRIO);//保存图像函数 Mat image…
转自: https://blog.csdn.net/weixin_36340947/article/details/77095924 转自: https://blog.csdn.net/robinhjwy/article/details/77618819 opencv提供了line()函数来对直线的绘制.其原型如下: void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lin…
部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 22 直方图 22.1 直方图的计算,绘制与分析目标 • 使用 OpenCV 或 Numpy 函数计算直方图 • 使用 Opencv 或者 Matplotlib 函数绘制直方图 • 将要学习的函数有:cv2.calcHist(),np.histogram()原理 什么是直方图呢?通过直方图你可以对整幅图像的灰度分布有一个整体的了解.直方图的 x 轴是灰度值(0 到 255),y 轴是图片中具有同一个灰度值的点…
1  图像直方图 1.1  定义 统计各个像素值,在整幅图像中出现次数的一个分布函数.        1.2  标准化 $\quad p_r(r_k) = \frac{n_k}{MN} \qquad k = 0, 1, 2, ..., L -1 $ $r_{k}$ - 第 k 个像素灰度值:  $n_{k}$ - 像素灰度值为 rk 的像素数目: MN - 图像中总的像素个数:  [0, L-1] - 像素灰度值的范围 1.3  直方图均衡化 1.3.1  定义  直方图均衡化,是将给定图像的直…
引言 在图像处理中,对于直方图这个概念,肯定不会陌生.但是其原理真的可以信手拈来吗? 本文篇幅有点长,在此列个目录,大家可以跳着看: 分析图像直方图的概念,以及opencv函数calcHist()对于RGB图像的直方图的绘制 在其基础上自已定义函数实现对灰度图像直方图的简单绘制 直方图均衡化 直方图的反向投影 图像直方图分析以及opencv函数实现 (一)直方图的介绍 直方图到底可以干什么呢?我觉得最明显的作用就是有利于很直观的对图像进行分析了,直方图就像我们常用的统计图,直方图可以用来描述各种…
部分 VIII机器学习 OpenCV-Python 中文教程(搬运)目录 46 K 近邻(k-Nearest Neighbour ) 46.1 理解 K 近邻目标 • 本节我们要理解 k 近邻(kNN)的基本概念.原理 kNN 可以说是最简单的监督学习分类器了.想法也很简单,就是找出测试数据在特征空间中的最近邻居.我们将使用下面的图片介绍它. 上图中的对象可以分成两组,蓝色方块和红色三角.每一组也可以称为一个 类.我们可以把所有的这些对象看成是一个城镇中房子,而所有的房子分别属于蓝色和红色家族,…
在使用opencv中的函数时,连续两次遇到函数找不到的问题,第一次查时按照他人说的包含进一个头文件后,果真还真解决了:然而第二次在调用cvInpaint函数时包含进对应头文件,编译通过但运行不成功还是未定义标识符.在网上搜了之后才真正理解了原因,某个函数找不到主要是由于debug和release库文件没有选择完全. 解决办法:先加入debug和release缺少的库文件后,然后再include进包含该函数声明的头文件即可调用.eg:cvInpaint找不到. 在配置属性的时候,在连接器->输入…
图像边缘检测--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 ); image单通道输入图像.edges单通道存储边缘的输出图像threshold1第一个阈值threshold2第二个阈值aperture_sizeSobel 算子内核大小 (见 cvSobel). 函数 cvCa…
部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 23 图像变换 23.1 傅里叶变换目标本小节我们将要学习: • 使用 OpenCV 对图像进行傅里叶变换 • 使用 Numpy 中 FFT(快速傅里叶变换)函数 • 傅里叶变换的一些用处 • 我们将要学习的函数有:cv2.dft(),cv2.idft() 等原理 傅里叶变换经常被用来分析不同滤波器的频率特性.我们可以使用 2D 离散傅里叶变换 (DFT) 分析图像的频域特性.实现 DFT 的一个快速算法被称…
kmeans算法的原理参考:http://www.cnblogs.com/mikewolf2002/p/3368118.html 下面学习一下opencv中kmeans函数的使用.      首先我们通过OpenCV中的随机数产生器RNG,生成一些均匀分布的随机点,这些点的位置对应一副图像中的像素位置,然后使用kmeans算法对这些随机点进行分类,并计算出分类簇的中心点.      随机产生的簇的数量是2到5之间的值,采样点的数量范围是1-1000,一维矩阵centers存放kmeans算法结束…
图像边缘检測--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 ); image单通道输入图像.edges单通道存储边缘的输出图像threshold1第一个阈值threshold2第二个阈值aperture_sizeSobel 算子内核大小 (见 cvSobel). 函数 cvCa…
多边形逼近,用嘴贴切的多边形标识 void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed): InputArray curve:输入的点集 OutputArray approxCurve:输出的点集,当前点集是能最小包容指定点集的.draw出来即是一个多边形: double epsilon:指定的精度,也即是原始曲线与近似曲线之间的最大距离. bool closed:若为tr…
最近在把matlab的代码转化到VS2010上. matlab中采用im2double将读入的图像转换为double型,在OpenCV中就需要对图像进行深度的转换. 读入一幅灰度图像,深度为1(8U),在与其他矩阵M做运算事要保证深度是一致的,所以需要转换,如转换到深度为8(64F),需要用到OpenCV中的函数cvConvert. 代码如下: IplImage* src = cvLoadImage("./Image/2/多波段.bmp",CV_LOAD_IMAGE_GRAYSCALE…
最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜索的流程整理一下,想到什么说什么吧. 首先在进行图片灰度化处理之前,我觉得有必要了解一下为什么要进行灰度化处理. 图像灰度化的目的是什么? 将彩色图像转化为灰度图像的过程是图像的灰度化处理.彩色图像中的每个像素的颜色由R,G,B三个分量决定,而每个分量中可取值0-255,这样一个像素点可以有1600…