随笔分类 -  OpenCV

OpenCV学习(25) 直方图(2)
摘要:在OpenCV中,也可以对三通道的图像,比如BGR,HSV等计算直方图。方法和计算单通道图像直方图相似,下面的代码描述了如何计算一个BGR三通道图像的直方图,需要注意的是,因为是三通道,每个通道取值都是[0,255],所以bin的数目达到了256*256*256,这时如果使用普通三维矩阵输出直方图结果,需要很大的空间,所以我们通常使用稀疏矩阵来保存输出结果。因为稀疏矩阵只保存非零值,这样可以节省存储空间。int main( int argc, char** argv ) { Mat src, dst; /// 打开图像 src = imread( "../lenn... 阅读全文

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

OpenCV学习(24) 直方图(1)
摘要:直方图是对数据的统计,并将统计结果分布于一系列预定义的槽中。这里的数据不仅仅指的是灰度值,它可以是任何能有效描述图像特征的数据,比如图像梯度等等。 假设有一个矩阵包含一张图像的信息 (灰度值 0-255),我们已经知道灰度值范围是0-255,假设有16个槽(bin),则有下面的划分:我们可以统计落入每个槽中像素的数目,并用直方图的形式显示出来。让我们再来了解一下直方图的一些具体细节:dims: 需要统计的特征的数目, 在上例中, dims = 1 因为我们仅仅统计了灰度值(灰度图像)。 bins: 每个特征空间 子区段 的数目,在上例中, bins = 16range: 每个特征空间的取值范. 阅读全文

posted @ 2013-11-02 14:06 迈克老狼2012 阅读(1134) 评论(0) 推荐(0) 编辑

Kmeans聚类算法分析(转帖)
摘要:原帖地址:http://www.opencvchina.com/thread-749-1-1.html k-means是一种聚类算法,这种算法是依赖于点的邻域来决定哪些点应该分在一个组中。当一堆点都靠的比较近,那这堆点应该是分到同一组。使用k-means,可以找到每一组的中心点。当然,聚类算法并不局限于2维的点,也可以对高维的空间(3维,4维,等等)的点进行聚类,任意高维... 阅读全文

posted @ 2013-10-24 20:26 迈克老狼2012 阅读(5542) 评论(0) 推荐(2) 编辑

OpenCV学习(23) 使用kmeans算法实现图像分割
摘要:本章我们用kmeans算法实现一个简单图像的分割。如下面的图像,我们知道图像分3个簇,背景、白色的任务,红色的丝带以及帽子。 Mat img = cv::imread("../kmeans.jpg"); namedWindow("image"); imshow("image", img); 首先我们会生成采样点,采样... 阅读全文

posted @ 2013-10-23 21:48 迈克老狼2012 阅读(9517) 评论(1) 推荐(0) 编辑

OpenCV学习(22) opencv中使用kmeans算法
摘要:kmeans算法的原理参考:http://www.cnblogs.com/mikewolf2002/p/3368118.html 下面学习一下opencv中kmeans函数的使用。 首先我们通过OpenCV中的随机数产生器RNG,生成一些均匀分布的随机点,这些点的位置对应一副图像中的像素位置,然后使用kmeans算法对这些随机点进行分类,并计算出分类簇的中心点。 ... 阅读全文

posted @ 2013-10-16 20:15 迈克老狼2012 阅读(9702) 评论(0) 推荐(1) 编辑

Kmeans算法原理极其opencv实现(转帖)
摘要:原帖地址:http://blog.csdn.net/qll125596718/article/details/8243404 1.基本Kmeans算法[1] 选择K个点作为初始质心 repeat 将每个点指派到最近的质心,形成K个簇 重新计算每个簇的质心 until 簇不发生变化或达到最大迭代次数 时间复杂度:O(tKmn)... 阅读全文

posted @ 2013-10-14 11:51 迈克老狼2012 阅读(4251) 评论(0) 推荐(0) 编辑

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 阅读(14509) 评论(1) 推荐(1) 编辑

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

posted @ 2013-09-20 13:53 迈克老狼2012 阅读(28542) 评论(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 阅读(3322) 评论(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 阅读(2817) 评论(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 阅读(3131) 评论(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 阅读(5780) 评论(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 阅读(12515) 评论(1) 推荐(0) 编辑

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

posted @ 2013-09-15 08:53 迈克老狼2012 阅读(7524) 评论(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 阅读(21859) 评论(3) 推荐(5) 编辑

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

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

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

posted @ 2013-09-14 15:38 迈克老狼2012 阅读(985) 评论(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 阅读(4606) 评论(0) 推荐(0) 编辑

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

posted @ 2013-09-14 09:26 迈克老狼2012 阅读(4228) 评论(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 阅读(16000) 评论(0) 推荐(0) 编辑

导航