09 2013 档案

OpenCV学习(21) Grabcut算法详解
摘要:grab cut算法是graph cut算法的改进。在理解grab cut算之前,应该学习一下graph cut算法的概念及实现方式。 我搜集了一些graph cut资料:http://yunpan.cn/QGDVdBXwkXutH grab cut算法详细描述见资料中的pdf文件:“GrabCut” — Interactive Foreground Extraction... 阅读全文

posted @ 2013-09-26 19:54 迈克老狼2012 阅读(14650) 评论(1) 推荐(1) 编辑

OpenCV学习(20) grabcut分割算法
摘要:在OpenCV中,实现了grabcut分割算法,该算法可以方便的分割出前景图像,操作简单,而且分割的效果很好。算法的原理参见papaer:“GrabCut” — Interactive Foreground Extraction using Iterated Graph Cuts 比如下面的一副图,我们只要选定一个四边形框,把框中的图像作为grabcut的一个输入参数,表示该框中... 阅读全文

posted @ 2013-09-20 13:53 迈克老狼2012 阅读(28706) 评论(2) 推荐(1) 编辑

OpenCV学习(19) 细化算法(7)
摘要:最后再来看一种通过形态学腐蚀和开操作得到骨架的方法。http://felix.abecassis.me/2011/09/opencv-morphological-skeleton/ 代码非常简单: void gThin::cvmorphThin(cv::Mat& src, cv::Mat& dst) { if(src.type()!=CV_8UC1) ... 阅读全文

posted @ 2013-09-19 19:18 迈克老狼2012 阅读(3343) 评论(0) 推荐(0) 编辑

OpenCV学习(18) 细化算法(6)
摘要:本章我们在学习一下基于索引表的细化算法。 假设要处理的图像为二值图,前景值为1,背景值为0。 索引表细化算法使用下面的8邻域表示法: 一个像素的8邻域,我们可以用8位二进制表示,比如下面的8邻域,表示为00111000=0x38=56 我们可以枚举出各种情况下,当前像素能否删除的表,该表大小为256。它的索引即为8邻域表示的值,表中存的值为0或1,0表示当前像素不能删除,1表示... 阅读全文

posted @ 2013-09-19 19:02 迈克老狼2012 阅读(2838) 评论(0) 推荐(0) 编辑

OpenCV学习(17) 细化算法(5)
摘要:本章我们看下Pavlidis细化算法,参考资料http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/contour_tracing_Abeer_George_Ghuneim/theo.html Computer VisiAlgorithms in Image Algebra,second edition... 阅读全文

posted @ 2013-09-19 13:50 迈克老狼2012 阅读(3157) 评论(0) 推荐(0) 编辑

OpenCV学习(16) 细化算法(4)
摘要:本章我们学习Rosenfeld细化算法,参考资料:http://yunpan.cn/QGRjHbkLBzCrn 在开始学习算法之前,我们先看下连通分量,以及4连通性,8连通性的概念: http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/contour_tracing_Abeer_George_Ghu... 阅读全文

posted @ 2013-09-17 22:18 迈克老狼2012 阅读(5869) 评论(1) 推荐(0) 编辑

OpenCV学习(15) 细化算法(3)
摘要:本章我们学习一下Hilditch算法的基本原理,从网上找资料的时候,竟然发现两个有很大差别的算法描述,而且都叫Hilditch算法。不知道那一个才是正宗的,两个算法实现的效果接近,第一种算法更好一些。 第一种算法描述参考paper和代码: Linear Skeletons from Square Cupboards Speedup Method for Real-Time Thi... 阅读全文

posted @ 2013-09-17 21:00 迈克老狼2012 阅读(12667) 评论(1) 推荐(0) 编辑

OpenCV学习(14) 细化算法(2)
摘要:前面一篇教程中,我们实现了Zhang的快速并行细化算法,从算法原理上,我们可以知道,算法是基于像素8邻域的形状来决定是否删除当前像素。还有很多与此算法相似的细化算法,只是判断的条件不一样。在综述文章, Thinning Methodologies-A Comprehensive Survey中描述了各种细化算法的实现原理,有兴趣可以阅读一下。 下面看看图像细化的定义以... 阅读全文

posted @ 2013-09-15 08:53 迈克老狼2012 阅读(7583) 评论(0) 推荐(0) 编辑

OpenCV学习(13) 细化算法(1)
摘要:程序编码参考经典的细化或者骨架算法文章: T. Y. Zhang and C. Y. Suen, “A fast parallel algorithm for thinning digital patterns,” Comm. ACM, vol. 27, no. 3, pp. 236-239, 1984. 它的原理也很简单: 我们对一副二值图像进行骨架提取,就是删除不需要的轮廓点... 阅读全文

posted @ 2013-09-14 20:25 迈克老狼2012 阅读(22125) 评论(3) 推荐(5) 编辑

OpenCV学习(12) 图像的腐蚀与膨胀(3)
摘要:通过使用不同的结构元素来进行膨胀腐蚀操作,可以检测图像中的角点,下面就一步一步看这个算法如果实现角点检测。 原图像: 首先我们创建四个结构元素 先用十字结构元素对原图像进行膨胀操作,得到下面的图像 再对这个图像用钻石型结构元素进行腐蚀操作,得到图像1,如下图所示: 接着,我们对原图像用X型结构元素进行膨胀操作,得到: 我们再用方形结构元素对上面图像进行腐蚀操作,... 阅读全文

posted @ 2013-09-14 15:43 迈克老狼2012 阅读(1205) 评论(1) 推荐(0) 编辑

OpenCV学习(11) 图像的腐蚀与膨胀(2)
摘要:先对一副灰度图像进行腐蚀操作,然后在腐蚀后的图像上再进行膨胀操作,我们定义这个操作为开操作。 先对一副图像进行膨胀操作,然后在膨胀后的图像上再进行腐蚀操作,我们定义这个操作为闭操作。 开操作可以去掉场景中一些孤立的点,而闭操作通常可以填充前景中一些小洞,通常通过这两种操作,使得图像看起来更圆润光滑一点。 在opencv中,我们通过函数 cv::morphologyEx(Imag... 阅读全文

posted @ 2013-09-14 15:38 迈克老狼2012 阅读(991) 评论(0) 推荐(0) 编辑

OpenCV学习(10) 图像的腐蚀与膨胀(1)
摘要:建议大家看看网络视频教程:http://www.opencvchina.com/thread-886-1-1.html 腐蚀与膨胀都是针对灰度图的形态学操作,比如下面的一副16*16的灰度图。 它每个像素对应的值为(每个像素值范围都在0-255之间)为: 我们定义一个5*5的结构元素,该结构元素用5*5的矩阵表示,其中为1的单元,表示该单元在结构元素中有效,另外还... 阅读全文

posted @ 2013-09-14 15:16 迈克老狼2012 阅读(4634) 评论(0) 推荐(0) 编辑

OpenCV学习(6) 文件和Mat之间的数据交换
摘要:有时候为了便于调试算法,我们需要从文本文件或二进制文件中读取数据,并把数据放到相应的矩阵中去。我们通常可以通过下面的函数实现。 1、从二进制文件中读取数据。 新建一个txt文件 input.txt,在vs2010中,右键点击该文件,选择open with,然后选择Binary Editor,就可以用二进制的方式打开文件了。 编辑文件并保存之后,我们可以... 阅读全文

posted @ 2013-09-14 09:26 迈克老狼2012 阅读(4276) 评论(0) 推荐(0) 编辑

OpenCV学习(5) Mat的基本操作(2)
摘要:本章我们学习一下Mat中的常用操作,因为在后面其它的教程中,我们经常要对图像进行各种处理,也要使用这些操作。 一、 Mat的复制,就是从一个矩阵A,生成相关的另一个矩阵B。 (1)使用赋值的方法,比如通过构造函数生成矩阵N,通过复制生成矩阵P cv::Mat N(M); cv::Mat P; P=M; 这样生成的矩阵,只是新生成... 阅读全文

posted @ 2013-09-14 09:00 迈克老狼2012 阅读(16072) 评论(0) 推荐(0) 编辑

OpenCV学习(4) Mat的基本操作(1)
摘要:图像在OpenCV中都是通过Mat类来存储的,Mat可以用来表示N维矩阵,当然用的最多的还是二维矩阵。 Mat类有两部分组成:第一部分是头信息,这些信息主要用来描述矩阵,比如矩阵维数ndims,rows,cols(这两个成员变量主要用于二维矩阵,用来表示行数和列数),size,sizes, type,step等等;第二部分是data信息,这是一个指针,指向Mat中存储的数... 阅读全文

posted @ 2013-09-13 21:11 迈克老狼2012 阅读(5869) 评论(0) 推荐(0) 编辑

OpenCV学习(3) OpenCV框架
摘要:OpenCV是一个开源的视觉库,其中包括很多计算机视觉的算法实现。在版本2.2以后,OpenCV采用C++特征的API,在1.x版本中,OpenCV函数都是传统的C语言形式。 OpenCV采用模块化的结构,每个模块都是由一些动态和静态库组成,该模块会实现一些特定的计算机视觉算法。要使用某个特定的库,我们必须在程序中先包含该库的头文件,并把该库的lib作为链接库。 例如要... 阅读全文

posted @ 2013-09-13 19:17 迈克老狼2012 阅读(2064) 评论(0) 推荐(0) 编辑

OpenCV学习(2) OpenCV的配置
摘要:下面我们在VS2010中编写一个简单的OpenCV程序,来看看如何在程序中使用OpenCV。 创建一个新的Win32 控制台程序,附加选项为空工程(empty project),并添加一个cpp源文件main.cpp,内容如下: #include #include int main() { cv::Mat img = cv::imread("lenna.jpg"); ... 阅读全文

posted @ 2013-09-13 19:07 迈克老狼2012 阅读(1027) 评论(0) 推荐(0) 编辑

OpenCV学习(1) OpenCV的安装
摘要:1. 下载文件 下载最新的OpenCV windows版本: 链接:http://sourceforge.net/projects/opencvlibrary/files/opencv-win/ 我下载的版本是2.46,下载后得到OpenCV-2.4.6.0.exe,自解压该文件到目录D:\opencv2.31\opencv2.46。自解压之后,会生成一个opencv的子目录,所... 阅读全文

posted @ 2013-09-13 18:46 迈克老狼2012 阅读(898) 评论(1) 推荐(0) 编辑

OpenCV学习(9) 分水岭算法(3)
摘要:本教程我学习一下opencv中分水岭算法的具体实现方式。 原始图像和Mark图像,它们的大小都是32*32,分水岭算法的结果是得到两个连通域的轮廓图。 原始图像:(原始图像必须是3通道图像) Mark图像: 结果图像: 初始的mark图像数据如下,黄色的部分为我们的第一个mark区域,值为255,第二个区域为褐红色的区域,值为128,第三个绿色的区域,值为64。 ... 阅读全文

posted @ 2013-09-12 21:45 迈克老狼2012 阅读(5704) 评论(9) 推荐(1) 编辑

OpenCV学习(8) 分水岭算法(2)
摘要:现在我们看看OpenCV中如何使用分水岭算法。 首先我们打开一副图像: // 打开另一幅图像 cv::Mat image= cv::imread("../tower.jpg"); if (!image.data) { cout(255*imageMask(x,y)... 阅读全文

posted @ 2013-09-06 07:04 迈克老狼2012 阅读(4075) 评论(2) 推荐(0) 编辑

OpenCV学习(7) 分水岭算法(1)
摘要:分水岭算法主要用于图像分段,通常是把一副彩色图像灰度化,然后再求梯度图,最后在梯度图的基础上进行分水岭算法,求得分段图像的边缘线。 下面左边的灰度图,可以描述为右边的地形图,地形的高度是由灰度图的灰度值决定,灰度为0对应地形图的地面,灰度值最大的像素对应地形图的最高点。 我们可以自己编程实现灰度图的地形图显示,工程FirstOpenCV6就实现了简单的这个功... 阅读全文

posted @ 2013-09-05 19:24 迈克老狼2012 阅读(26454) 评论(4) 推荐(9) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示