
Opencv学习笔记
文章平均质量分 88
小村长
大学在校研究生一枚,关注方向:计算机视觉,数据结构,C希望和大家交流,共同提高
微博:http://weibo.com/u/2653613245 欢迎交流!
展开
-
laplace变换 ----边缘检测
Laplace计算图像的 Laplacian 变换void cvLaplace( const CvArr* src, CvArr* dst, intaperture_size=3 );src输入图像.dst输出图像.aperture_size核大小 (与 cvSobel 中定义一样).函数 cvLaplace 计算输入图像的 Laplacian变换,方法是先用转载 2013-09-07 21:11:47 · 2536 阅读 · 0 评论 -
Opencv2系列学习笔记6(直方图的应用)
前面我讲述了直方图的概念以及如何用opencv实现一维和二维的直方图。详见这两篇blog: Mat 格式:http://blog.youkuaiyun.com/lu597203933/article/details/16884409 cv:http://blog.youkuaiyun.com/lu597203933/article/details/14104505 这次主要想讲点直方图的应用,其中包括使原创 2013-12-01 22:44:32 · 10886 阅读 · 3 评论 -
Opencv2系列学习笔记8(图像滤波)
一:概念:滤波是信号处理机图像处理中的一个基本操作。滤波去除图像中的噪声,提取感兴趣的特征,允许图像重采样。图像中的频域和空域:空间域指用图像的灰度值来描述一幅图像;而频域指用图像灰度值的变化来描述一幅图像。而低通滤波器和高通滤波器的概念就是在频域中产生的。低通滤波器指去除图像中的高频成分,而高通滤波器指去除图像中的低频成分。后面将介绍低通滤波器—均值和高斯滤波器;中值滤波器—非线原创 2013-12-10 22:46:54 · 16826 阅读 · 0 评论 -
opencv学习_11 (模板匹配(包括单模板和多模板))
模板匹配——在一幅图像中匹配与模板相似的单个或者多个目标(1)目标匹配函数:cvMatchTemplate( const CvArr* image, constCvArr* templ, CvArr* result,int method );Image 待搜索图像Templ 模板图像Result 匹配结果原创 2013-11-08 21:16:16 · 47120 阅读 · 21 评论 -
opencv学习_9 (轮廓提取)
轮廓提取——主要针对二值图像 轮廓分为外轮廓和内轮廓 如下图:外轮廓以c开头 内轮廓以h开头 opencv 提供了寻找轮廓的函数 inttotals = cvFindContours(img, storage,&contours,sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_NONE,cvPoint(0,0));其原创 2013-11-07 21:34:07 · 24767 阅读 · 3 评论 -
Opencv2系列学习笔记11(霍尔夫变换)
本节主要介绍如何用Hough变换检测直线和圆一:Hough变换检测直线 原始Hough变换思想:先求出图像中每点的极坐标方程如下图>,相交于一点的极坐标曲线的个数大于最小投票数,则将该点所对应的(p, r0)放入vector中,即得到一条直线,lines中存储的是极坐标方程的参数注意hough变换要求输入的是包含一组点的二值图像。代码:Canny(image,原创 2013-12-25 22:34:55 · 3445 阅读 · 2 评论 -
VS配置Opencv原理
Vs2010配置opencv的步骤可以我的这篇blog:http://blog.youkuaiyun.com/lu597203933/article/details/11175811. 配置主要包括4点配置:环境变量的配置;vc++目录中包含目录和库目录的配置;链接器输入的配置。在介绍这四点配置前,我首先想简单介绍下.lib文件和.dll文件:一:.lib文件和.dll文件(1)lib是编译时需原创 2013-12-31 16:29:44 · 2471 阅读 · 2 评论 -
图像放大与缩小—插值
Opencv中对于图像的放大与缩小主要有两种类型,一种是图像金字塔pyrUp和pyrDown函数,另外一种是更通用的resize函数允许你指定目标图像的尺寸。一:图像金字塔对于函数pyrDown和pyrUp在没有指定缩放的大小时,默认大小为源图像的一半或2倍。PyrDown的原理是先将图像进行高斯平滑,然后去除偶数行。PyrUp的原理是图像新插入的偶数行全部为0,然后进行高斯平滑。原创 2013-12-31 22:11:53 · 5272 阅读 · 2 评论 -
Opencv2系列学习笔记10(提取连通区域轮廓)
连通区域指的是二值图像中相连像素组成的形状。而内、外轮廓的概念及opencv1中如何提取二值图像的轮廓见我的这篇博客:http://blog.youkuaiyun.com/lu597203933/article/details/14489225 轮廓的简单提取算法如下: 系统性地扫描图像直到遇到连通区域的一个点,以它为起始点,跟踪它的轮廓,标记边界上的像素。当轮廓完整闭合,扫描回到原创 2013-12-19 19:22:28 · 21863 阅读 · 4 评论 -
Sift特征
关于sift的特征介绍,已经有很多的blog对其进行简介了,见参考的blog。我也没有将2004年那篇原文精细看完,这里只是提供在opencv中如何实现 sift关键点的检测。Code:#include #include #include #include #include #include // sift特征在这个头文件中using namesp原创 2014-01-09 13:12:53 · 7289 阅读 · 1 评论 -
Opencv2系列学习笔记12(检测fast特征)
一:Fast特征定义什么是角点:这次的定义基于假定特征点周围的图像强度,通过检查候选像素周围一圈像素来决定是否接受一个特征点。与中心点差异较大的像素如果组成连续的圆弧,并且弧长大于原周长的3/4,那么我们认为找到了一个特征点。二:加速技巧 首先测试圆上被90度分割的四个点(顶部,底部,左侧及右侧),那么为了满足上述条件,四个点中至少三个点必须大于或者小于中心像素。如果不成立,那么该原创 2014-01-12 22:16:16 · 3762 阅读 · 2 评论 -
opencv学习_1(VS2010-openCV2.4.3-win7 配置说明)
最近刚学openCV,其中配置就花费了一段时间,特将自己的配置过程分享给大家,希望大家少走弯路,有疑问和不对的可以指出来安装:VS2010的安装---这里就不说了OpenCV2.4.3安装-----下载地址http://nchc.dl.sourceforge.net/project/opencvlibrary/opencv-win/2.4.3/OpenCV-2.4.3.exe,直接安装原创 2013-09-05 19:34:56 · 14863 阅读 · 8 评论 -
YUV格式转换为RGB(基于opencv)
之前写代码过程中需要将YUV格式视频中每帧提取出来,然后保存为图片。网上普遍有两种方法,第一种是通过opencv自带cvCvtColor,但是这种方法有bug,得到的图片会泛白。第二种方法是公式法。法一:opencv自带cvCvtColor说明:这种方法会出现图片“泛白”,具体原因网上是说cvCvtColor这个函数左右协议不同,不太懂。代码: void FileWriteFram原创 2014-05-17 21:26:44 · 27107 阅读 · 15 评论 -
CvMat、Mat、IplImage之间的转换详解及实例
OpenCV学习之CvMat的用法详解及实例 CvMat是OpenCV比较基础的函数。初学者应该掌握并熟练应用。但是我认为计算机专业学习的方法是,不断的总结并且提炼,同时还要做大量的实践,如编码,才能记忆深刻,体会深刻,从而引导自己想更高层次迈进。1.初始化矩阵: 方式一、逐点赋值式: CvMat* mat = cvCreateMat( 2, 2, CV_64转载 2014-06-28 13:07:30 · 3418 阅读 · 0 评论 -
Opencv2系列学习笔记9(使用Canny算子检测轮廓)
前面我们用sobel算子和拉普拉斯变换也可以进行边缘检测,见我的上一篇blog:http://blog.youkuaiyun.com/lu597203933/article/details/17252285但这样得到的二值边缘图像有两大缺点。第一:检测到的边缘过粗,这意味着难以实现物体的精确定位。第二:难以找到这样的阀值,即能足够低检测到所有重要的边缘,同时也不至于包含过多次要的边缘。这个正是ca原创 2013-12-16 22:07:41 · 12136 阅读 · 0 评论 -
图像形态学操作—腐蚀膨胀深入
这里我们主要想讲解冈萨雷斯的数字图像处理这本书上膨胀腐蚀的定义及用opencv实现的结果,然后对比它们之间的差异。一:opencv实现 在这之前可以看我的另外一篇blog:膨胀:案例代码:int main(){ int a[8][8] = { {0,0,0,0,0,0,0,0}, {0,0,5,1,0,0,1,1}, {0,1,0,1,0,1,0原创 2014-07-01 22:15:14 · 3289 阅读 · 3 评论 -
Opencv2系列学习笔记7(图像形态学运算)
形态学滤波理论于上世纪90年代提出,被用于分析及处理离散图像。它定义了一系列的运算,应用预定义的形状元素来变换一张图像。一:图像腐蚀、膨胀和开闭运算图像的腐蚀:替换为当前像素位像素集合中的最小像素值,函数为dilate图像的膨胀:替换为当前像素位像素集合中的最大像素值,函数为erode图像的开运算:先腐蚀后膨胀,函数为morphologyEx,对应的参数为MORPH_CLOSE原创 2013-12-07 09:29:08 · 5197 阅读 · 0 评论 -
OpenCV2.3.1在CentOS6.5下的安装
安装的linux版本是centos6.5,选择的是opencv2.3.1。不是很新的版本。因为在安装opencv2.4.9的时候,make的过程中出现了问题. 一:安装依赖包依赖包用yum安装就可以了,需要以下安装包:yum install cmake gcc gcc-c++ gtk+-devel gimp-develgimp-devel-tools gimp-help-brows原创 2014-10-27 22:51:49 · 3125 阅读 · 0 评论 -
LBP简介
LBP(local binary pattern)是一种用来描述图像局部纹理特征的算子。原始的LBP于1994年提出,它反映内容是每个像素与周围像素的关系。后被不断的改进和优化,分别提出了LBP旋转不变模式、LBP均匀模式等。一:原始的LBP 给出一个简单的案例计算LBP:如下图,周围8个像素点比中间点像素值大(或者相等)的记为1,小的记为0,这样就得到二值图,然后按顺时针方向得到二进原创 2013-12-07 09:43:48 · 14503 阅读 · 8 评论 -
Opencv2系列学习笔记5(检测Harris角点)
在计算机视觉中,兴趣点(也叫关键点或者特征点)的概念被大量用于解决物体识别、图像匹配、视觉跟踪、三维重建等问题。它依赖于这个想法,即不再观察整副图像,而是选择某些特殊的点,然后对它们执行局部分析。如果能检测到足够多的这种点,同时它们的区分度很高,并且可以精确定位稳定的特征,那么这个方法就很有效。Harris角点的理论部分见opencv1的这篇blog:http://blog.youkuaiyun.com/原创 2013-11-28 22:50:53 · 12574 阅读 · 1 评论 -
opencv学习_7 (颜色空间)
这次我主要说说颜色空间,包括三个方面:RGB颜色空间,HSV颜色空间以及颜色空间的转换RGB颜色空间介绍:1:RGB颜色空间简介 三基色原理:大多数的颜色可以通过红、绿、蓝三色按照不同的比例合成产生,同样绝大多数单色光也可以分解成红绿蓝三种色光 红绿蓝三基色按照不同的比例相加合成混色称为相加混色。其中一些混色的规律有:原创 2013-11-03 22:10:38 · 11576 阅读 · 2 评论 -
opencv中图像的通道、深度的解释
关于通道的解释: 1、比较通俗易懂的解释是:灰度图的通道数为1,彩色图的通道为3。基本上,描述一个像素点,如果是灰度,那么只需要一个数值来描述它,就是单通道。如果一个像素点,有RGB三种颜色来描述它,就是三通道。 2、4通道通常为RGBA,在某些处理中可能会用到。2通道图像不常见,通常在程序处理中会用到,如傅里叶变换,可能会用到,一个通道为实数,一个通道为虚数,主要是编程方便转载 2013-09-06 21:04:06 · 4014 阅读 · 0 评论 -
opencv学习_10 (图像和轮廓的匹配(hu矩))
图像和轮廓的匹配(hu矩) (1)hu矩的概念,我也总结了但是我不过多的阐述,因为我也不是太理解,只知道它具有平移,旋转,尺度不变性,详细见别人的这篇blog:http://blog.youkuaiyun.com/wrj19860202/article/details/6327094(2)opencv 的实现——计算hu矩普通矩和中心矩的计算 Void cvMoments(con原创 2013-11-08 20:07:33 · 127048 阅读 · 6 评论 -
opencv学习_5 (IplImage的结构)
IplImage结构体为: typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; /* 版本 (=0)*/ int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */原创 2013-10-31 22:21:54 · 8559 阅读 · 3 评论 -
Opencv2系列学习笔记2(图像的遍历)
图像遍历主要有三种方法,本节主要介绍和比较这三种方法。一:简单存取像素值 首先介绍一个名词—椒盐噪点:它是一种特殊的噪点,它随机的将图像中的部分像素设置为白色或者黑色。Code:#include #include #include #include using namespace std;using namespace cv;void salt(Mat原创 2013-11-16 18:47:15 · 15463 阅读 · 0 评论 -
Opencv2系列学习笔记1(图像的基本操作)
一:Opencv2与opencv1的区别: Opencv1.0版本于2006年面世,主要基于C语言。2009年发布opencv2,主要基于C++。此时opencv库被划分成多个模块,这些模块被编译成库文件后,位于lib文件夹中。主要有以下模块(版本1的结构见我的这篇blog:http://blog.youkuaiyun.com/lu597203933/article/details/1361原创 2013-11-15 22:51:17 · 8592 阅读 · 0 评论 -
opencv学习_14 (图像的尺度空间)
什么是图像的尺度空间? 比如用baidu地图的放大缩小查看国家地区信息,这个放大缩小就涉及到图片的尺度信息。为什么需要尺度空间?视觉系统处理这些图片时,这些图片来自于未知的一些场景,未知的尺度,未知的角度等噪声影响下,我们为了克服这些困难,就需要建立相应的尺度空间怎么样去建立尺度空间?通过不同方差的高斯和去做卷积结论:通过高斯和获取图像的尺度空间高斯窗口和高斯方差原创 2013-11-13 20:27:10 · 4179 阅读 · 0 评论 -
opencv学习_13 (trajkovic 角点检测)
背景引言本节主要内容来源于是由 Miroslav Trajkovic和Mark Hedley[1]在1998年提出Trajkovic算子,其论文为FastCorner Detection.和Trajkovic Operator (4-Neighbours)[3](注:本节图片主要是来源于此)。Trajkovic算子角点提取方法存在价值是在角点提取的效果上,它优于同时期的其他角点(如转载 2013-11-12 15:27:47 · 4323 阅读 · 2 评论 -
opencv学习_12 (harris角点检测)
一:原理:Harris角点检测最直观的解释是:在任意两个相互垂直的方向上,都有较大变化的点。---harris在A combined corner and edge detector 这篇文章中提出来的。在moravec角点检测中,w(x,y)的取值是二元的,在窗口内部就取值为1,在窗口外部就取值为0,在harris的角点检测中,使用的是高斯窗口,所以w(x,y)表示的是高原创 2013-11-10 20:02:37 · 10819 阅读 · 2 评论 -
Opencv学习_2 (opencv结构&显示图像)
opencv结构:1:主要包含: cxcore cv machine learning highgui cvcam cvaux2:cxcore: 基础结构:CvPoint,CvSize, CvScalar等 数组结构:cvCreateImage,cvCreateMat等 动态结构:CvMemSt原创 2013-10-29 22:43:24 · 4874 阅读 · 2 评论 -
opencv学习_15 (利用cmake查看opencv的源码)
当我们有时想查看opencv自带的函数的源代码,比如函数cvCreateImage, 此时我们选中cvCreateImage, 点击鼠标右键->转到定义,我们会很惊讶的发现为什么只看到了cvCreateImage的一个简单声明,而没有源代码呢?这是因为openCV将很多函数被加入了函数库,并被编译成了dll,所以只能看到函数申明,没法看到源代码。下面我们详细解释并讲解如何利用cmake查看open原创 2013-11-14 14:46:15 · 22586 阅读 · 17 评论 -
opencv学习_11 (moravec角点检测及缺点)
(1)首先我们来看三幅图片理解什么是角点:我们在图片以某像素点为中心,取一窗口,当窗口向各个方向移动时,其内部灰度值变化不是很明显,则该点即处在平坦区域(如左边图);当其内部灰度值只在几个固定的方向上变化较为明显,那么该点则处在边缘区域(如图中间部分);当向各个方向移动,其变化都是很明显,则该点为角点(如图右)。当然,上面所说的变化明显与否,是与我们事先设定的阀值进行对比的。(原创 2013-11-10 14:01:41 · 7954 阅读 · 1 评论 -
Opencv学习_3 (Opencv读取视频 &视频进度控制 &写视频)
opencv读取视频: 使用opencv读取视频主要用到这几个函数:cvCreateFileCapture cvQueryFrame (或cvGrabFrame cvRetrieveFrame) cvReleaseCapture。1:简单介绍:CvCapture是一个结构体,用来保存图像捕获所需要的信息,opencv提供了两种方式从外部捕获图像 一种是从摄原创 2013-10-31 11:25:02 · 8161 阅读 · 3 评论 -
opencv学习_8 ( 图像细化)
图像细化——针对的是二值图像 或者用阀值处理的二值图像(1):例子 左边为输入图像 右边为细化的效果图(2)思想:公式: y = p0*2^0 + p1*2^1+ p2*2^2 + p3*2^3 + p4*2^4 + p5*2^5 + p6*2^6 +p7*2^7 前辈们对此作出了总结,得出每个点周围8领域的256种情况,放在一个char data原创 2013-11-06 21:08:43 · 19099 阅读 · 11 评论 -
opencv学习_4(opencv基础数据结构 CvPoint & CvSize & CvRect & CvScalar & CvArr & CvMat)
1:包含在cxcore/include/cxtypes.h头文件中。2:CvPoint系列 -----(x,y) CvPoint:表示图像中的点 CvPoint2D32f:二维空间中的点 CvPoint3D32f:三维空间中的点3:CvSize系列-----宽度和高度 CvSize:图像的尺寸原创 2013-10-31 19:53:08 · 15822 阅读 · 0 评论 -
opencv学习_6 (灰度直方图)
灰度直方图这次我从最基本的直方图讲起,一维直方图,至于二维等高维直方图,仅作为了解,后面有时间另开blog详解。1:首先我们给出一幅图其中的数据假设对应一副灰度图片的灰度值,则直方图的作用就是画出在bin范围内取值的个数,如图左边的直方图---相当于我们word中的柱状图。2:在opencv中直方图的结构为:typedef struct CvHistogram原创 2013-11-03 14:10:13 · 10796 阅读 · 2 评论 -
Opencv2系列学习笔记2_2(图像的其它操作)
本节主要涉及到图像的领域、算术操作以及如何操作图像感兴趣的区域。一:邻域操作以下例子主要对图像进行锐化。基于拉普拉斯算子。这幅图像的边缘部分将得到放大,细节部分将更加的锐利。计算方式为:sharpened_pixel = 5*current – left – right –up – down.Code:#include #include #include #include原创 2013-11-18 22:17:06 · 7104 阅读 · 0 评论 -
Opencv2系列学习笔记4(灰度直方图)
和之前的一篇blog【http://blog.youkuaiyun.com/lu597203933/article/details/14104505】一样,这篇是opencv2的Mat格式。一:一维直方图Code:int main(){ Mat image = imread("F:\\huangrong.jpg", 0); if(!image.data) { cout << "fa原创 2013-11-24 21:10:23 · 6896 阅读 · 2 评论 -
图像质量的客观评估指标PSNR与SSIM
图像质量的客观评估指标PSNR与SSIMPSNRSSIM代码参考文献1:PSNRPSNR是最为常用的图像质量评估指标: 其中K为图像对应二进制位数,一般为8。MSE为均方误差,计算公式为: 2:SSIMSSIM[^footnote]主要用来衡量图像结构完整性,是另一种比较常用的客观评估指标。实际应用中,一般用滑动窗口对图像进行分块,这里的滑动窗口一般为高斯窗口,并用高斯加权计算原创 2016-03-30 21:48:02 · 29832 阅读 · 3 评论