OpenCV
文章平均质量分 82
tiemaxiaosu
这个作者很懒,什么都没留下…
展开
-
图像金字塔
一、作用图像金字塔被广泛用于各种视觉应用中。图像金字塔是一个图像集合,集合中所有的图像都源于同一个原始图像,而且是通过对原始图像连续降采样获得,直到达到某个中止条件才停止降采样。(当然,降为一个像素肯定是中止条 件。)图像金字塔:以多分辨率来解释图像的一种有效但概念简单的结构。图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低的图像集合。金字塔的原创 2016-03-16 10:52:41 · 1261 阅读 · 0 评论 -
直方图与匹配
一、概述 直方图广泛应用于很多计算机视觉应用中。通过标记帧与帧之间显著的边缘和颜色的统计变化,直方图被用来检测视频中场景的变换。直方图是计算机视觉中最经典的工具之一。 直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中。bin中的数值是从数据中计算出的特征的统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。直方图获得的是数据分析的统计图。通常原创 2016-04-28 14:34:47 · 2536 阅读 · 0 评论 -
模板匹配
一、概述 模板匹配是一种用于在源图像S中寻找定位给定目标图像T(即模板图像)的技术。其原理很简单,就是通过一些相似度准则来衡量两个图像块之间的相似度Similarity(S,T)。 它的用途:模板匹配方法常用于一些平面图像处理中,例如印刷中的数字、工业零器件等小尺寸目标图像识别分类。模板匹配中,源图像和模板图像可以是二值图像、灰度图像、彩色图像。 模原创 2016-04-28 15:05:27 · 2300 阅读 · 0 评论 -
OpenCV 光流
一、概述 稠密光流:将图像中的每个像素都与速度关联。该光流可以用Horm-Schunck方法计算。实际上计算稠密光流并不容易。稠密光流的方法需要使用某种插值方法在比较容易跟踪的像素之间进行插值以解决那些运动不明确的像素,从中可以清楚地看到稠密光流相当大的计算量。原创 2016-05-26 16:13:48 · 849 阅读 · 0 评论 -
OpenCV mean-shift和camshift跟踪
一、mean-shift 算法 mean-shift 算法是一种在一组数据的密布分布中寻找局部极值的稳定的方法。若分布是连续的,处理过程就是比较容易,这种情况下本质上只需要对数据的密度直方图应用爬山算法即可。但是,对于离散的数据集,这个问题在某种程度上是比较麻烦的。 mean-shift 算法的步骤如下:(1)选择搜索窗口。包括窗口的初始位置、窗口的类型、窗口的形状、窗口的大原创 2016-05-26 17:27:22 · 1035 阅读 · 0 评论 -
运动模板跟踪
一、概述 运动模板是一种有效的跟踪普遍运动方法,尤其可应用在姿势识别中。运用运动模板需要知道物体的轮廓。而轮廓的获取有一下几种方法:(1)利用一个静止的摄像机,使用帧间差得到物体的运动边缘,这种信息就足够让运动模板发挥作用。(2)利用颜色信息。(3)学习一个背景模型,从此背景中可以将新的前景物体或人以轮廓的形式分割出来。(4)使用主动轮廓技术。例如,创建一个红外光的原创 2016-05-27 16:53:00 · 773 阅读 · 0 评论 -
OpenCV Kalman滤波器
一、概述 Kalman 滤波器的基本思想是,若有一组强而合理的假设,给出系统的历时测量值,则可以建立最大化这些早前测量的后验概率的系统状态模型。另外,无需存储很长的早前测量历史,我们也可以最大化后验概率,即重复更新系统状态模型。 Kalman 滤波器需要三个重要的假设:(1)被建模的系统是线性的;(2)影响测量的噪声属于白噪声;(3)噪声本质上是高斯分布的。第一条假原创 2016-05-27 17:49:11 · 631 阅读 · 0 评论 -
OpenCV 内存管理
一、概述 OpenCV使用内存存储器(memory storage)来统一管理各种动态对象的内存。内存存储器在底层被实现为一个有许多相同大小的内存块组成的双向链表,通过这种结构,OpenCV可以从内存存储器中快速地分配内存或将内存返回给内存存储器。二、相关函数1、创建内存块 CvMemStorage* cvCreateMemStorage( int block_size原创 2016-05-06 10:26:46 · 1326 阅读 · 0 评论 -
基于OpenCV 图像分割
一、概述 从图像中将目标或部分目标分割出来,是我们在进行图像处理的操作,也是有意义的事情。在很多情况下,我们也希望将感兴趣的目标区域分割出来,比如将一个人的脸或手分割出来。具体有下面提到的几种方法。1、背景减除 背景减除是在背景模型建立后,将背景模型和当前的图像进行比较,然后减去这些已知的背景信息,则剩下的目标物大致就是所求的前景目标。背景减除法的缺点是假设所原创 2016-05-19 11:26:40 · 4447 阅读 · 0 评论 -
OpenCV 序列CvSeq
一、概述 序列是内存存储器中可以存储的一种对象。序列是某种结构的链表。OpenCV中,序列可以存储多种不同的结构。你可以将序列想象为许多编程语言中都可以存在的容器类或者容器类模板(如C++中的vector)。序列在内存被实现为一个双端对列(deque)。因此序列可以实现快速的随机访问,以及快速删除顶端的元素,但是从中间删除元素则稍慢些。二、结构体CvSeq定义typede原创 2016-05-09 09:47:55 · 776 阅读 · 0 评论 -
OpenCV 团块跟踪
一、概述 OpenCV 团块跟踪过程细分为:前景检测模块、新团块(blob)检测模块、团块跟踪模块、轨迹生成模块和轨迹后处理模块。而跟踪流程模块CvBlobTrackerAuto把这五个模块连接起来。如下图所示: 各个模块的功能: (1)、前景检测模块:对每个像素判断其是前景还是背景; (2)、新团块检测模原创 2016-06-04 11:47:58 · 4403 阅读 · 0 评论 -
OpenCV 团块跟踪sample使用
用的是VS2010+opencv2.4.3,自带程序在D:\OpenCV-2.4.3\opencv\samples\c blobtrack_sample.cpp1、VS新建一个程序,将blobtrack_sample.cpp程序全部拷入,注意工程属性--输入中需要添加opencv库文件;2、编译通过,生成.exe文件3、将需要测试的视频放入工程下,例如命名为1.avi,在命令行拖入.e转载 2016-06-04 11:48:31 · 1773 阅读 · 0 评论 -
基于OpenCV 肤色检测
一、相关代码如下//肤色检测void IMG_ComplexionDetector(IplImage* img){ Mat imgROI(img); Mat ROI_mask; IplImage *img_mask = NULL; //椭圆皮肤模型 Mat skinCrCbHist = Mat::zeros(Siz原创 2016-06-23 16:27:45 · 1606 阅读 · 0 评论 -
OpenCV 命名空间 using namespace
在OpenCV中使用 using namespace cv 的作用: 在使用#include语句包含相应头文件后,使用下面语句即可包含相应的Opencv命名空间 using namespace cv; 如果没有这个语句,那么在这个命名空间的相关资源就需要带上cv前缀,如cv::Mat,表示的是使用命名空间cv中的Mat;而有了using namespa原创 2016-10-21 14:45:02 · 9782 阅读 · 3 评论 -
OpenCV3.1-OpenCL的使用
参考:http://opencv.org/platforms/opencl.html一、OpenCV-2.x 和 OpenCV-3.x使用区别OpenCL-aware code OpenCV-2.x// initializationVideoCapture vcap(...);ocl::OclCascadeClassifier fd("haar_ff.xml原创 2016-10-18 17:47:51 · 6164 阅读 · 5 评论 -
VS2013 配置OpenCV3.1
一、环境:Windows10家庭版 64位 Virtual Stadio 2013 OpenCV 3.1 二、配置VS的项目属性(1)选择X64原创 2016-10-19 09:30:48 · 602 阅读 · 0 评论 -
opencv中Mat使用
转载:http://www.360doc.com/content/17/0115/21/39864082_622698495.shtml(一)Mat矩阵中数据指针Mat.data是uchar类型指针,CV_8U系列可以通过计算指针位置快速地定位矩阵中的任意元素。二维单通道元素可以用Mat::at(i, j)访问,i是行序号,j是列序号。但对于多通道的非uns转载 2017-01-15 21:52:28 · 1571 阅读 · 0 评论 -
OpenCV Mat 拷贝与ROI
(1)浅拷贝//注意:浅拷贝 - 不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用) Mat a; Mat b = a; //a "copy" to b Mat c(a); //a "copy" to c //注意:浅拷贝 - 不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用)转载 2017-01-15 22:11:17 · 6237 阅读 · 0 评论 -
OpenCV 轮廓
一、概述 一个轮廓一般对应一系列的点,也就是图像中的一条曲线。表示方法可能根据不同情况而有所不同。有多种方法可以表示曲线。在OpenCV中一般用序列来存储轮廓的信息。序列中的每一个元素是曲线中一个点的位置。 从哪里提取轮廓呢?我们一般可以从cvCanny( )函数得到的有边缘像素的图像,或者是从cvThreshold( )及cvAdaptiveThreshold(原创 2016-05-09 11:51:13 · 1297 阅读 · 0 评论 -
OpenCV 轮廓的凸性
一、概括 理解物体形状或轮廓的另外一种有用的方法是计算一个物体的凸包(convex hull)然后计算其凸缺陷(convexity defects)。很多复杂物体的特性能很好的被这种缺陷表现出来。二、相关函数1、发现点集的凸外形CvSeq* cvConvexHull2( const CvArr* input, void* hull_storage=NULL,原创 2016-05-10 11:45:56 · 3350 阅读 · 0 评论 -
OpenCV 轮廓基本特征
一、概述 我们通过cvFindContours( )函数获取得图像轮廓有何作用呢?一般来说,我们对轮廓常用的操作有识别和处理,另外相关的还有多种对轮廓的处理,如简化或拟合轮廓,匹配轮廓到模板,等等。 我们在轮廓处理中经常需要对轮廓变化一些特征进行概括,比如长度或者一些反映轮廓整体大小的度量。另外轮廓矩也是概括轮廓的特征的重要方法。二、常见特征函数1、多边形原创 2016-05-10 10:26:31 · 5811 阅读 · 0 评论 -
图像离散傅里叶变换
一、离散傅里叶变换作用 在分析图像信号的频率特性时,对于一幅图像,直流分量表示预想的平均灰度,低频分量代表了大面积背景区域和缓慢变化部分,高频部分代表了它的边缘,细节,跳跃部分以及颗粒噪声. 因此,我们可以做相应的锐化和模糊的处理:提出其中的高频分量做傅里叶逆变换得到的就是锐化的结果。提出其中的低频分量做傅里叶逆变换得到的就是模糊的结果。最根本的一点就是将时域内的信号转移到原创 2016-03-29 13:26:08 · 2667 阅读 · 0 评论 -
积分图像
一、积分图像概要 积分图像是指:对于一幅灰度的图像,积分图像中的任意一点(x,y)的值是指从图像的左上角到这个点的所构成的矩形区域内所有的点的灰度值之和。积分图是图像中十分常用的方法,最初是在Haar特征的快速计算中使用,后来发现在均值滤波,二值化等图像处理方法中也十分常见。二、积分图像计算 如果输入图像大小是W*H,输出图像的大小必须为(W+1)*(H+1原创 2016-03-29 13:53:26 · 1983 阅读 · 0 评论 -
直方图均衡化
一、概述 图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。原创 2016-03-29 16:03:10 · 904 阅读 · 0 评论 -
阈值化
一、阈值思想阈值的基本思想:给定一个数组和一个阈值,然后根据数组中的每个元素的值是低于还是高于阈值而进行一些处理。二、cvThreshold( )函数void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type );src 原始数组原创 2016-03-17 11:08:40 · 735 阅读 · 0 评论 -
VS2010 + OpenCV2.4.3
转载一篇关于VS2010 + OpenCV2.4.3安装及环境配置等,非常实用。在此感谢原创者。 一.OpenCV的编译安装:1.解压OpenCV-2.4.3.exe -> D:\OpenCV\Resources\OpenCV-2.4.3\opencv2.运行CMake,为VS编译.Where is the source code(源码): D:\OpenCV\Resource转载 2016-03-07 16:48:53 · 620 阅读 · 0 评论 -
图像卷积
一、图像卷积的原理图像卷积:就是图像f(x),模板g(x),然后将模块g(x)在模板中移动,每到一个位置就把f(x)与g(x)的定义域相交的元素进行乘积并求和,并将这个结果放在与输入图像参考所相对应的位置。二、图像卷积的作用一副数字图像可以看作一个二维空间的离散函数可以表示为f(x, y), 假设有对于二维卷积操作函数C(u, v) ,则会产生输出图像g(x, y) = f(x, y)原创 2016-03-21 10:04:05 · 1485 阅读 · 0 评论 -
Sobel算子
一、Sobel算子基本原理Sobel算子是一阶导数的边缘检测算子,在算法实现过程中,通过3×3模板作为核与图像中的每个像素点做卷积和算,然后选取合适的阈值以提取边缘。采用3×3邻域可以避免在像素之间内插点上计算梯度。Sobel算子也是一种梯度幅值,即:其中的偏导数Sx 和Sy可用卷积模板来实现。Sx=(Z1+2Z2+Z3)-(Z7+2Z8+Z9)Sy=(Z1+2Z4+Z7)原创 2016-03-22 14:18:01 · 21348 阅读 · 0 评论 -
图像拉普拉斯算子
一、拉普拉斯算子原理拉普拉斯算子是最简单的各向同性微分算子,具有旋转不变性。一个二维图像函数的拉普拉斯变换是各向同性的二阶导数,定义为:为了更适合于数字图像处理,将该方程表示为离散形式: 另外,拉普拉斯算子还可以表示成模板的形式,如图5-9所示。图5-9(a)表示离散拉普拉斯算子的模板,图5-9(b)表示其扩展模板,图5-9(c)则分别表示其他两种拉普拉斯的实现模板。从模原创 2016-03-22 15:45:00 · 21037 阅读 · 0 评论 -
IPP库简介
IPP(Integrated Performance Primitives) 是Intel 平台上高性能多媒体函数库,该函数库包含许多从底层优化的函数,这些函数涵盖多个应用领域。如果系统已经安装了IPP库,OpenCV会在运行时自动使用相应的IPP库。 具体包括:(1)视频编码:用于 DV25/50/100、MPEG-2、MPEG-4、H.263 和 MPEG-4 Part 10 (H.原创 2016-03-11 14:03:05 · 8865 阅读 · 0 评论 -
cvShowImage( )函数
cvShowImage( )函数是显示一张图片。函数通过设置其第一个参数确定在哪个已存在的窗口中显示图像。cvshowlinage( )函数被调用时,该窗口将被重新绘制,并且图像也会显示在窗口中。如果该窗口在创建时被指定CV_WINDOW_AUTOSIZE标志作为cvNamedWindow( )函数的第二个参数,该窗口将根据图像的大小自动调整为与图像一致。原创 2016-03-11 16:25:20 · 4755 阅读 · 0 评论 -
Ipllmage数据
一、Ipllmage 结构体typedef struct Ipllmage { int nSize; int ID; int nChannels; int原创 2016-03-11 17:23:16 · 925 阅读 · 0 评论 -
Canny算子
一、Canny算子概述 通常情况下边缘检测的目的是在保留原有图像属性的情况下,显著减少图像的数据规模。目前有多种算法可以进行边缘检测,虽然Canny算法年代久远,但可以说它是边缘检测的一种标准算法,而且仍在研究中广泛使用。 Canny算子的基本原理:总的来说,图像的边缘检测必须满足两个步骤:(1)有效的抑制噪声,使用高斯算子对图像进行平滑;(2)尽量精确原创 2016-03-24 16:30:34 · 2491 阅读 · 0 评论 -
cvSmooth 平滑处理
一、平滑处理“平滑处理”又称为“模糊处理”,是用来减少图像上的噪声或者失真。降低图像分辨率时,平滑处理是很重要处理。在OpenCV中可以使用cvSmooth函数对图像进行平滑处理。二、cvSmooth函数void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int p原创 2016-03-14 16:22:05 · 818 阅读 · 0 评论 -
图像形态学
图像形态学一、介绍图像形态学的基本形态转换是膨胀和腐蚀,它们能实现多种功能:例如消除噪声、分割出独立的图像元素以及在图像中连接相邻的元素。形态学也常被用来寻找图像中的明显的极大值区域或极小值区域以及求出图像的梯度。二、腐蚀和膨胀1.腐蚀腐蚀的方法是,拿B的中心点和X上的点一个一个地对比,如果B上的所有点都在X的范围内,则该点保留,否则将该点去掉;右边是腐蚀后的结果。可以看出,它原创 2016-03-15 16:15:09 · 817 阅读 · 0 评论 -
图像尺寸调整cvResize( )
一、介绍我们经常会将某种尺寸的图像转换为其他尺寸的图像,如放大或者缩小图像。我们可以用cvReSiZe()函数来放大或缩小图像。该函数可以将源图像精确转换为目标图像的尺寸。如果源图像中设置了ROI,那么cvReSize()将会对ROI区域调整尺寸,以匹配目标图像,同样,如果目标图像中已设置R0I的值,那么cvResize()将会将源图像进行尺寸调整并填充到目标图像的R0I中。二、函数cvR原创 2016-03-15 16:44:33 · 2246 阅读 · 0 评论 -
霍夫变换
一、霍夫变换概述 霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线。二、霍夫变换算法思想 以直线检测为例,每个像素坐标点经过变换都变成都直线特质有贡献的统一度量,一个简单的例子原创 2016-03-25 17:42:05 · 9623 阅读 · 3 评论 -
OpenCV 轮廓矩
一、概述 我们在实际中如何应用这些轮廓呢?比如,有两个轮廓如何进行比较匹配,或者如何比较一个轮廓和一个抽象模板。比较两个轮廓最简洁的方式是比较它们的轮廓矩。矩是通过对轮廓上所有点进行积分运算(或者认为是求和运算)而得到的一个粗略特征。二、矩及Hu矩的结构体typedef struct CvMoments{ double m00, m10, m01, m20,原创 2016-05-10 11:27:48 · 3404 阅读 · 0 评论 -
OpenCV InputArray和OutputArray
InputArray这个接口类可以是Mat、Mat_、Mat_、vector、vector>、vector。也就意味着当你看refman或者源代码时,如果看见函数的参数类型是InputArray型时,把上诉几种类型作为参数都是可以的。有时候InputArray输入的矩阵是个空参数,你只需要用cv::noArray()作为参数即可,或者很多代码里都用cv::Mat()作为空参。这个类转载 2017-01-15 22:33:11 · 2622 阅读 · 0 评论