OpenCV
文章平均质量分 61
superjimmy
这个作者很懒,什么都没留下…
展开
-
openCV学习笔记(1)--IplIamge数据结构
typedef struct _IplImage { int nSize; /* IplImage大小,=sizeof(IplImage)*/ int ID; /* 版本 */ int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */ int alphaChannel; /* alpha通道,被OpenCV忽略 */原创 2011-02-08 12:38:00 · 2796 阅读 · 1 评论 -
Sift算法-----part6
<br />Sift算法-----part6<br /> 前言:这是本系列的最后一部分了,我们剩下的唯一工作就是采取每个关键点的指纹,这样才能把他从其他部分区别出来。<br /> <br /> <br /> <br /> 做法<br /> <br /> 我们的目标是给每个关键点创建一个独一无二的指纹,前提必须他很容易计算,另一方面我们希望他在作比较时能保持相对宽松,比较在不同的两张图片中,物体总是有或多或少的区别的。<br />为了完成这个目标,我们为每个关键点建立一个16*16的区域,原创 2011-02-23 20:52:00 · 1745 阅读 · 1 评论 -
Sift算法-----part5
<br />Sift算法-----part5<br /> 前言:通过前四部分的操作,我们已经得到优化后的关键点,它们已经在实践中被证明是稳定有效的,下一个步骤中,我们将为每一个关键点分配方向,这个方向将保证角度不怕。<br /><br /> <br /> <br />做法:<br /> 具体做法是收集每个关键点梯度方向和大小。然后我们就可以得出这区域中最突出的方向。我们将这个方向分配给每个关键点。其后的所有计算都是与这个方向是紧紧相关的,这保证了方向不变。<br />原创 2011-02-23 20:14:00 · 907 阅读 · 0 评论 -
Sift算法-----part4
<br />Sift算法-----part4<br /> 我们在前面的步骤中产生了许多关键点,其中的一些点是沿边缘分布的或者经历的对比不够充分,其中的任一种情况都使得这些关键点不能成为特征点。所以,我们得剔除它们。剔除的方式类似于Harris角点检测法中使用的方法。<br /> <br /> <br /> <br /> <br />移除低对比度的特征点<br /> <br />这很简单,如果在DOG图像中某点像素点的值小于某个特定的值,那么丢弃它。因为我们已经计算出亚像素点,我们需要使用taylo原创 2011-02-22 23:34:00 · 1023 阅读 · 1 评论 -
Sift算法-----part2
<br />Sift算法-----part2<br /> <br /> <br /> <br /> <br /> <br />前言:<br /> 在上一个步骤中,我们创建了图像的尺度空间,即逐步模糊图片,缩小它然后依次类推。现在,我们将使用模糊的图片去创建一系列的图片--高斯差(DOG)。这些DOG对找出图像的关键点十分重要。<br /> <br /> <br /> <br /> <br />高斯--拉普拉斯(Laplacian of Gaussian)算子:<br /> LOG算法的步原创 2011-02-22 13:19:00 · 1847 阅读 · 3 评论 -
Sift算法-----part1
Sift算法-----part1 前言:真实世界中的物体只有在某些尺寸中才有价值。比如,你在桌上放置了一台电脑,而你在电脑前,那么电脑就很好地存在。而当你在一个离电脑很远的地方查看时,它就像一粒尘埃,没有什么意义。尺度空间的概念旨在将现实中的这个理念用于数字图像的处理中。尺度空间: 你是可以选择看着一个树还是一片叶子,这取决于你的喜好。如果你选择了一棵树,那么你会选择忽略掉某些细节(例如叶子等)。当然你在选择忽略掉某些细节时,你必须保证不会引人更多的细节。唯一合理的方式是采用高斯模糊(在原创 2011-02-21 21:14:00 · 1308 阅读 · 0 评论 -
sift算法学习
SIFT: Scale Invariant Feature Transform(尺度不变特征转换)先介绍第一部分:在不同图片之间进行特征匹配是计算机图形学中一个常见的问题。在一般情况下,简单的角点检测就能达到目的。但是,当你拥有的图片不同尺寸,或者不同角度,sift算法就能派上用场。Sift是一个相当复杂的算法,需要相应的知识,而且很容易使人糊涂。我将算法分为以下如下几个部分: 一、构建尺度空间:这是初始步骤。你可以创建对原始图像的内部表示来保证尺寸不变,这就是构建尺度空间的工作。二、高斯--拉普拉斯(La原创 2011-02-21 00:01:00 · 1869 阅读 · 4 评论 -
openCV学习笔记(8)-- 图像阈值化
图像阈值化:在对图像进行操作时,希望能对一些低于和高于一定值的像素进行操作。opencv的cvThreshold()可以完成某些任务。double cvThreshold(CvArr* src,CvArr* dst,double threshold, //Tdouble max_value, //Mint threshold_type); //只能处理8位或浮点灰度图像threshold_type包括一些类型选项CV_THRESH_BINARY(src>T)?M:0CV_THRESH原创 2011-02-17 08:54:00 · 6985 阅读 · 2 评论 -
openCV学习笔记(7)-- cvResize()尺寸调整
<br /> <br />尺寸调整:<br />void cvResize(const CvArr* src,CvArr* dst,int interpolation = CV_INTER_LINEAR //插值方法/*CV_INTER_NN 最近邻插值*CV_INTER_LINER 线性插值*CV_INTER_AREA 区域插值*CV_INTER_CUBIC 三次样条插值*/) <br />原创 2011-02-12 19:35:00 · 6349 阅读 · 0 评论 -
openCV学习笔记(5)-- 图像形态学
<br /> <br />图像形态学主要有四个操作,即膨胀、腐蚀、开运算和闭运算<br />(1)在讨论四个操作之前,我们先看看核结构<br />IplConvKernel* cvCreateStructingElementEx(int cols,int rows,int anchor_x,int anchor_y,int shape,int* values = null); <br />void cvReleaseStructingElement(IplConvKernel原创 2011-02-12 10:37:00 · 4492 阅读 · 0 评论 -
openCV学习笔记(3)-- 写入视频
<br /><br />openCV 实现写入视频的步骤:<br />(1)新建一个CvVideoWriter结构,其相应的方法如下<br />CvVideoWriter* cvCreateVideoWriter(<br />const char* filename,//文件名<br />int fourcc,//视频编码格式codec,用四个字符标记编码格式,OpenCV提供了一个宏CV_FOURCC(c0,c1,c2,c3)来实现打包操作<br />double fps,//被创建视频流的帧率<br /原创 2011-02-11 11:34:00 · 2291 阅读 · 0 评论 -
openCV学习笔记(4)--cvSmooth函数
openCV平滑函数void cvSmooth( const CvArr* src, CvArr* dst, int smooth = CV_GAUSSIAN, int param1 = 3, int param2 = 0, int param3 = 0, int param4 = 0); 注解:(1)可能大家啊对CvArr的理解不是很深刻,可以将其看做C++中的基类,当然也包括IplImage(2)smooth支持的类型:CV_BLUR简单模糊 对每个像素param1,pa原创 2011-02-11 19:18:00 · 15588 阅读 · 0 评论 -
openCV学习笔记(2)--cvCreateTrackbar
<br /><br />int cvCreateTrackbar(<br />const char* trackbar_name,//滑动条的名称<br />const char* window_name,//窗口的名称,滑动条不会遮挡图像<br />int* value,//当滑动条被拖到时,OpenCV会自动将当前位置所代表的值传给指针指向的整数<br />int count,//滑动条所能达到的最大值<br />CvTrackbarCallback on_change//可选的回调函数,回调函数可参见原创 2011-02-10 23:29:00 · 7971 阅读 · 0 评论 -
openCV学习笔记(9)-- 图像剪切
<br />图像的剪切有多种方法,其中一种是使用ROI的方法<br /> <br />第一步:将需要剪切的图像图像不部分设置为ROI<br />cvSetImageROI(src , cvRect(x,y,width,height));<br /> <br />第二步:新建一个与需要剪切的图像部分同样大小的新图像<br />cvCreateImage(cvSize(width,height),IPL_DEPTH,nchannels);<br /> <br />第三步:将源图像复制到新建的图像中<br />c原创 2011-03-01 19:11:00 · 29684 阅读 · 4 评论 -
openCV学习笔记(6)-- cvFloodFill漫水填充算法
漫水填充算法(标记和分离图像的一部分)void cvFloodFill(IplImage* src,CvPoint seedPoint, //漫水法从点seedPoint开始实行算法CvScalar newVal, //像素点被染色的值CvScalar loDiff = cvScalarAll(0), //下标记--被染色的相邻点减去loDiffCvScalar upDiff = c原创 2011-02-12 19:30:00 · 13087 阅读 · 2 评论