12 2014 档案
摘要:以下讨论的环境基于Visual Studio 2010。在使用OpenCV的过程中,我们不但要指定头文件和库的目录,而且要指定库的名称,比如为了使用常用的基本功能,我们需要指定附加libopencv_highgui249.dll。相比之下,在使用C++的boost库的过程中,我们只需要指定头文件的目...
阅读全文
摘要:仿射变换的作用是将图像做旋转、拉伸。仿射变换是通过一个中间矩阵来使源图像像素的位置变换到指定的目标图像的像素的位置,原理类似于上文的remapping。所以仿射变换也是矩阵的一种运用。于是仿射变换一般分成两步:第一、寻找变换的中间矩阵;第二、进行变换。要找到变换的中间矩阵,一般使用三个点来寻找它,因...
阅读全文
摘要:何谓remapping呢?翻译过来就是重映射。因为每个图像本身就是f(x, y),是像素位置为自变量的像素值的函数。然后我们对这些位置上的像素的值再次进行变换,g(x, y) = f(h(x, y)),h(x, y)就是重映射的函数,g(x, y)就是重映射的结果。想象如果h(x, y) = f(I...
阅读全文
摘要:这些笔记的最初,我是以接近于源码分析的形式来梳理自己学习OpenCV的过程。然而写下来,一是执行力,二是时间的问题,确实越写越马虎了。用我老师的话:观其大略了。但是,暂时就这么写着吧。在笔记《十七》中,我们简单地谈到了霍夫变换检测直线的原理,就是判断相邻像素点的值(x, y)对应的r-theta曲线...
阅读全文
摘要:一般我们在检测物体轮廓的时候,会有检测直线的需求,这时可以用到OpenCV当中的霍夫变换实现。霍夫变换的原理的简单阐述见:http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html#hough-...
阅读全文
摘要:海盗分金好像是个博弈论的老问题了。本科的时候听GXL谈到过问题本身,没有去解。昨天,LX问到我这个问题。思考了一下解法,不知道对不对,写在这里。流行的问题是这样:五个海盗抢到了100枚金币,他们决定这么分:1.抽签决定自己的号码 :5 4 3 2 1;2.首先,由5号提出分配方案,然后5人共同进行表...
阅读全文
摘要:Canny方法被许多人认为是拿来做边缘检测的最佳的方法。在维基百科上有关于Canny方法的比较详细的介绍:http://en.wikipedia.org/wiki/Canny_edge_detector所以下面只是简单地提一下,因为暂时没有充裕的时间去阅读OpenCV实现Canny的源代码。Cann...
阅读全文
摘要:在笔记十四中,我们使用了Sobel算子对图像进行边缘检测,理论依据是像素变化最快的地方最有可能是边缘处,所以使用sobel算子对图像做微分,得到的结果图像当中灰度较大的区域,即为边缘处。在这里,我们使用Laplace算子来做边缘检测,也是类似的道理,只不过换成了二阶微分,在一阶微分的极大值的地方,二...
阅读全文
摘要:1. 什么是Sobel算子2. 为什么要对图像做微分3. 如何对图像做微分当我们要对图像进行边缘检测的时候,我们注意到,在边缘处像素的强度的变化率是很大的。而微分恰好是表示这种变化率的很好的方式。在对图像做微分的时候,我们也是对像素做卷积运算,而这里我们使用的kernel,就是Sobel算子。在使用...
阅读全文
摘要:看这个题目,为什么要为一幅图像加上边框呢?第一,做卷积的需要。当我们做卷积的时候,kernel往往不小于3X3的矩阵,那么首行、末行、首列、末列的元素就不能正确地与这个kernel做卷积。当我们给图像加上边框之后,就解决了这个问题。第二、两幅大小不一致的图像进行操作的时候,为了保证运算的正确性,我们...
阅读全文
摘要:在《OpenCV笔记(七)》中,写了四种线性滤波的方法:箱式滤波器、高斯滤波器、中值滤波器和双边滤波器。在OpenCV中,我们可以使用filter2D函数自定义kernel进行线性滤波。void filter2D(InputArray src, OutputArray dst, int ddepth...
阅读全文

浙公网安备 33010602011771号