
OpenCV
文章平均质量分 79
Fred_Yang2013
这个作者很懒,什么都没留下…
展开
-
OpenCV 2 学习笔记(6): 使用指针来扫描图像:减少图像的位深
在许多任务中,我们需要扫描图像中所有的像素点。考虑到那么多的像素点,这势必就需要一种高效率的方法。而减少图像颜色数就是一种比较好的方法。 试想一下一个三通道的图像,如果每一个通道是一个八位的无符号字符型数据,那么他总共可以表示的颜色达到256X256X256种。通常情况下,为了简化复杂度,减少颜色数是一种很好的方法。其中比较简便的做法是除以一个数,使RGB空间减少一个数量等级,原创 2013-08-17 17:04:14 · 1734 阅读 · 0 评论 -
OpenCV 2 学习笔记(4): 加载,显示和保存图像,Mat类与IplImage类
这一节介绍一些图像处理的最基本的方法。首先要声明一个类的对象cv:Mat image; 他有一个方法size()可以返回图像的宽和高: std::cout << "size: " << image.size().height << " , " 接下来去读取图像,并且分配内存: image= cv::imread("img.jpg"); 接下来就原创 2013-07-30 17:52:07 · 11013 阅读 · 0 评论 -
OpenCV 2 学习笔记(14): 颜色空间转换
RGB是以红,绿,蓝为三基色的颜色空间。之所以选择这三种主颜色是因为这三种颜色组合起来可以形成大量不同颜色。实际上,人类视觉系统也是基于视锥细胞对于红绿蓝光谱的三基色的感知。在数字图像中的颜色空间通常是不变的,这是因为它们获得光线的方法是默认的。捕捉的光线都经过红绿蓝滤波器。另外,在数字图像中,红绿蓝信道中的颜色等量时,就会获得一个从黑(0,0,0)到白(255,255,255)的灰度级。原创 2013-08-30 10:58:00 · 1780 阅读 · 1 评论 -
OpenCV 2 学习笔记(19): 利用均值漂移(Meanshift)寻找物体
关于meanshift算法的推导,请看http://www.cnblogs.com/liqizhou/archive/2012/05/12/2497220.html我觉得对于使用OpenCV的人来说,大部分都是想解决实际的问题,那么理论性的东西就不需要深究了,毕竟不是写论文。想使用的话,知道算法的名字,参数的意义和使用的步骤就可以了。C++: int meanShift(Input原创 2013-09-10 09:29:44 · 4934 阅读 · 0 评论 -
OpenCV 2 学习笔记(5): 像素的访问:给图像加入椒盐噪声
图像表示为一个有许多值的矩阵。矩阵中的每一个元素表示为一个像素。对于灰度图像,像素值是8位的无符号数表示。0表示黑,255表示白。对于彩色图像由三个这种数值组成,分别表示{红,绿,蓝}。这样就一个像素就包含了三个值。为了访问矩阵中的值,你只需要指定行和列。相应的元素,要么是一个单独的数值,要么是一个包含多个值的向量。 我们以椒盐噪声为例。我们将在图像中加入椒盐噪声。在传输过程中原创 2013-08-15 10:21:27 · 3703 阅读 · 1 评论 -
OpenCV 2 学习笔记(20): 关于NAryMatIterator
NAryMatIterator 是一个n元多维数组迭代器,说到这他和MatIterator的区别,我想大家都已经了解了:NAryMatIterator是一个Mat迭代器,而MatIterator是Mat元素的迭代器而NAryMatIterator的作用就是可以用来同时访问具有相同类型和结构的Mat。有时候也可以使用MatIterator来循环操作每一个Mat,但是有时候这样做会比较麻烦。原创 2013-09-22 11:23:34 · 4703 阅读 · 0 评论 -
OpenCV 2 学习笔记(24): 使用形态学滤波检测边缘与角点
在一幅灰度图像中,我们可以把亮的那一部分比作山,暗的那一部分比作山谷,而边缘就是山和山谷的相接的地方,这部分的灰度值会急剧的变化。如果在边缘地方使用腐蚀操作,那么和边缘交接的亮的地方就会被0所替代,也就山的一部分变成了山谷,那么山的高度就降低了。而膨胀的结果和这个相反。而水平地势的地方,也就是山顶的平地不会被影响到。利用这个原理我们就可以找到图像的边缘。也就是找出腐蚀和膨胀后的图像的不同,结果原创 2013-10-07 16:34:49 · 1943 阅读 · 0 评论 -
OpenCV 2 学习笔记(23): 开操作与闭操作
上一节中我们也说过:1. 开操作是先腐蚀、后膨胀处理。2. 闭操作是先膨胀、后腐蚀处理。也就是说开操作可以这样实现:cv::erode(result,result,cv::Mat()); cv::dilate(image,result,cv::Mat()); 闭操作就是把顺序颠倒过来。但是OpenCV中有专门的形态学算子:C++: void morpholo原创 2013-10-06 13:54:03 · 7682 阅读 · 4 评论 -
OpenCV 2 学习笔记(22): 腐蚀与膨胀
http://www.cnblogs.com/slysky/archive/2011/10/16/2214015.html原创 2013-09-26 15:14:52 · 3452 阅读 · 2 评论 -
OpenCV 2 学习笔记(21): 使用直方图比较检索相似图像
基于内容的图像检索在计算机视觉中是一个重要的方法。它从一组图片中找出一个和给定图片内容相似的图片。在前面我们已经学习过灰度直方图的相关知识,它包含了图像内容的许多信息。言下之意就是直方图可以被用来进行基于内容的图像检索。也就是说我么可以通过简单的比较图像的直方图来测量两张图片的相似性。OpenCV有一个函数会估计它们之间的相似性。但是直方图必须是要经过定义的。这种比较方法在过去已经提出了很多,原创 2013-09-22 19:25:00 · 3592 阅读 · 0 评论 -
OpenCV 2 学习笔记(25): 使用分水岭分割图像
关于分水岭的文章见:[1] Vincent L, Soille P. Watersheds in Digital Spaces : An Efficient Algorithm Based on Immersion Simulations[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence. 1991, 13原创 2013-11-08 11:14:04 · 4146 阅读 · 0 评论 -
OpenCV 2 学习笔记(27): 自选区域进行GrabCut图像分割
文中主要代码包括两部分,第一部分是人机交互选取mub原创 2014-05-29 16:44:44 · 2526 阅读 · 0 评论 -
OpenCV 2 学习笔记(26): 自选区域进行模板匹配
在定位中通常需要根据目标区域特征在图像中找出其正确的位置。使用比较多的方法还是模板匹配,模板匹配是根据区域的灰度值进行匹配,将结果存储在矩阵中,然后根据模板匹配所使用方法的不同寻找矩阵中最大值或者最小值就是最佳匹配。在opencv中使用cv::matchTemplate(src, temp, result, CV_TM_CCORR_NORMED);算子进行匹配。具体相关的解释见:http://原创 2013-12-17 14:21:29 · 7188 阅读 · 1 评论 -
OpenCV 2 遇到问题汇总
Matcher_Simple.obj: error LNK2019: 无法解析的外部符号"public:__thiscall cv::SURF::SURF(void)" (??0SURF@cv@@QAE@XZ),该符号在函数_wmain 中被引用Matcher_Simple.obj: error LNK2019: 无法解析的外部符号"public:__thiscall cv::SURF::SURF原创 2013-08-02 15:50:44 · 2519 阅读 · 0 评论 -
OpenCV 2 学习笔记(3): 一个简单的opencv程序:在Console上显示图像
首先在VC2010下新建一个Console应用程序,这个就不介绍了。在应用程序设置中,在空项目中打钩,但是在编译运行时要选择Release模式,要不然会出现错误,如果选择预编译头选项该错误就不会出现,具体还不知道什么原因。 在编译运行opencv前需要告诉程序去哪里寻找Opencv库和include库,这个再第一节安装opencv库时已经介绍过。但是如果每新建一个工程就要进行这些操作会比较麻原创 2013-07-30 17:37:26 · 1857 阅读 · 0 评论 -
OpenCV 2 学习笔记(15): 绘制图像直方图
图像由许多的像素组成。这些像素的分布和值包含了图像的许多重要的信息。利用这些信息我们可以计算出图像的直方图,并且去改善图片的效果,检测图像的纹理等。下面我们就来看一下怎么得到图像的直方图。 直方图给出了相同灰度值的像素个数。灰度图的直方图基本上有256个坐标点。0点给出了图像中所有灰度值为0的像素的个数等等依次类推。算出所有坐标值的和,也就得到了总的像素数。直方图也可以被规范化原创 2013-09-01 16:21:00 · 2757 阅读 · 0 评论 -
OpenCV 2 学习笔记(7): 如何更有效率的循环扫描图像
在面向对象编程中,遍历一个数据集合时通常使用迭代器。对于每一个集合类,标准模板类库(Standard Template Library )都有一个与之关联的迭代类。OpenCV提供的cv::Mat迭代类和C++ STL标准的迭代是兼容的。 对于cv::Mat实例的迭代对象可以由cv::MatIterator_object获得。从它的下划线可以看出它是一个模板方法。当图像迭代器在原创 2013-08-19 15:12:56 · 1689 阅读 · 0 评论 -
OpenCV 2 学习笔记(2): OpenCV 2 介绍
the OpenCV library is divided into several modules. These modules are built in library files located in the lib directory. They are:The opencv_core module that contains the core functionalities of t翻译 2013-07-30 17:28:11 · 1175 阅读 · 0 评论 -
OpenCV 2 学习笔记(10): 算法的基本设计模式<1>:策略模式(strategy pattern)
C++最大的优势是什么,就是面向对象,我们可以把属性和方法都封装到一个类里面。这样我们很容易变换一种方法或者可以更容易的创建复杂的程序。而且这样可以将复杂的程序封装起来,只留一个简单易用的接口。 下面我们想创建一个简单的算法,它会确定图像中有给定颜色的所有像素。算法中图像和颜色作为输入,输出为表示有给定颜色的一个二值图像。还有一个给定的幅度范围。// get the iter原创 2013-08-22 19:21:45 · 2079 阅读 · 0 评论 -
OpenCV 2 学习笔记(12): 算法的基本设计模式<3>:单例模式(Singleton pattern)
单例模式是另一种流行的设计模式。它保证在程序执行期间只有一个实例在运行。我们使用Singleton去访问一个Controller类。我们将使用上一节的ColorDetectController类。稍微修改一下获得一个Singleton类。首先我们要添加一个私有静态成员变量。另外为了防止创建类,初始化器是私有的。class ColorDetectController { priva原创 2013-08-26 20:06:27 · 1184 阅读 · 0 评论 -
OpenCV 2 学习笔记(1): OpenCV 2.4.3 的安装
Reference:Opencv 2 Computer Vision Application Prigramming Cookbook Author:Robert LaganièreIDE:VC2010 Express Opencv Version: 2.4.3Opencv 2.4.3的安装见:http://www.opencv.org.cn/index.php/V原创 2013-07-30 16:15:18 · 1067 阅读 · 0 评论 -
OpenCV 2 学习笔记(9): 定义ROI(regions of interest):给图像加入水印
有些时候对图像进行处理的时候只需要图像的某一部分就可以了,例如要识别吗、一张图片上面的字符,那么只需要处理带字符的那个区域就可以,也就是我们常说的ROI,这一节就说一下怎么定义ROI。 假设我们想把两张尺寸不同的图像合并在一起。例如我们想把下面的logo添加到图像中:我们知道cv::add以及其它的函数都只能添加相同尺寸的图片。所以在这之前我们要定义一个和logo原创 2013-08-22 11:43:55 · 6754 阅读 · 0 评论 -
OpenCV 2 学习笔记(13): 算法的基本设计模式<4> :使用Model-View-Controller模式创建一个应用程序
前面我们介绍了三个比较重要的设计模式:策略,控制器,单例。现在我们我们将这些模式用在一起形成一个程序架构,MVC架构模式,它将一个程序的应用逻辑和用户接口完全分离。下面我们在MFC下使用这个模式创建一个简单的GUI程序。在这之前,我们先简单的介绍一下MVC。Model包含了程序的所有信息,也就是说包含了所有应用程序处理的数据。当有新的数据创建时,它会通知Controller,然后控制器请求Vi原创 2013-08-29 14:39:43 · 2044 阅读 · 1 评论 -
OpenCV 2 学习笔记(11): 算法的基本设计模式<2>:使用Controller
当在一个程序中需要许多的算法时,那么最好将它们集中起来好控制。那么这时候就需要一个集中的控制器,以便于集中管理这些类。这就是管理器。在应用中起着一个重要的作用。 下面就让我们利用上一节的ColorDetecort类来说明Controller的使用。先创建一个界面程序,至于界面的创建,可以用QT也可以用MFC,由于我对于QT不熟悉,所以选择MFC。 控制器首先原创 2013-08-26 12:26:54 · 1172 阅读 · 0 评论 -
OpenCV 2 学习笔记(8): 利用邻域处理图像与简单的算术图像处理算法:图像滤波与加权和
关于邻域的概念,请查阅有关数字图像处理的书籍,在这里就不再赘述。在图像处理中,利用像素邻域的值来计算本邻域的值是非常常见的事情。例如滤波,边缘检测等。要同时访问多行中像素中的值。 我们选取锐化图像来讲述本节。拉普拉斯算子,关于这个后面的章节会提到。他是一个计算梯度的算子,通常用在边缘检测中。根据拉普拉斯算子模板卷积之后的算式为:sharpened_pixel=5*current-原创 2013-08-21 16:07:27 · 2450 阅读 · 0 评论 -
OpenCV 2 学习笔记(18): 反向投影
代码见:http://download.youkuaiyun.com/detail/u010525655/6224045原理:反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式。所谓反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的该特征。假设你已经通过下图得到一个肤色直方图(Hue-Saturation), 旁边的直方图就是 模型直原创 2013-09-06 16:03:31 · 1828 阅读 · 0 评论 -
OpenCV 2 学习笔记(16): 利用查找表(Look-up table)改善图片质量,增加图像对比度
本节是上一节的延伸,代码见:查找表可以将一个像素值转换成另一个像素值得对照表。它可以是一对一或者多对一(原像素对于新像素)。所以他是一维的,对于规则的灰度图像,它有256个元素。表中的每一个元素对应的值就是新的灰度值,例如如果第3个元素的值为45,那么源图像中像素值为3的值均变为45.在opencv中cv::LUT函数使用查找表实现上述功能。具体:cv::Mat apply原创 2013-09-03 21:05:52 · 8452 阅读 · 1 评论 -
OpenCV 2 学习笔记(17): 均衡化图像直方图
上一节我们提到可以使用拉伸直方图的方法,使图像中包含所有的灰度级,来改善图片的质量。但是有的时候,图像的视觉缺陷不是由于图像的所占用的灰度级数少儿导致的。而是一些图像中的一些灰度级出现太频繁,例如有时候中间灰度级出现太频繁,而偏黑色或者偏白色的灰度级太少,导致了颜色失衡等等。这样我们就会得出结论,一个视觉效果好的图片,应当所有灰度级数所占有的像素数基本都是相同的。对于图片做这种处理就叫做直方图均衡原创 2013-09-04 13:54:06 · 1938 阅读 · 0 评论 -
fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突
64位win7下,安装的VS2008,编译的时候报错为:fatalerror LNK1112:模块计算机类型“X86”与目标计算机类型“x64”冲突。说明一:编译64位的程序不一定要以64位的系统上,关键是一些配置,而且还要有64位程序的编译器,因为开始我以为编译64位的程序好像要在64位的系统上,后来经过查阅资料,得到了此结论,故在此特别说明一下。说明二: 若出现“模块计算机转载 2015-03-13 21:27:27 · 4511 阅读 · 0 评论