• Open Source Computer Vision Library

Opencv感想和一些分享

OpenCV使用问题:如函数调用,编译出错等

版主: chai2010, ollydbg23, bebekifis

Opencv感想和一些分享

帖子bebekifis » 2009-07-13 10:24

最近一直在写文章,好不容易赶完了,发现论坛很久都没来,感到十分的抱歉。在这里把最近这几个月来使用Opencv的感想和一些Opencv文档之外的东西分享给大家,希望有用。

首先还是说说如何学Opencv吧,记得最开始进实验室的时候师兄让看Opencv,当时的学术基础很差,编程能力也很一般,所以学Opencv时感到很无助,像是陷入了一个死循环。想通过算法看代码,发现算法不会;通过代码学算法,又发现自己读代码的能力很弱。后来通过不断的读文章(下面会推荐几篇文章供算法入门)和加强实际的编程能力,其实就是通过Opencv把一些经典的算法实现,来学习。慢慢的就会发现,Opencv和matlab一样好用。不过,Opencv是C/C++混合+模板编程+N多指针,看代码的确很费劲(很多模板类的代码和函数指针的调用函数我到现在还是没怎么看明白)。慢慢来就好,读代码读的多了,会有三个好处:1,更深入和实际的了解算法,深入的了解算法是指通过看代码可以获得算法在实际实践的时候很多细节方面的工作是如何做的,实际是指算法本身在实现的时候会有一些小的窍门,有的算法的实践并不是完完全全将算法翻译过来的,编程实现的时候有实践的一些小窍门。2,Opencv中有很多没有被列到文档里的很实用的代码(很多函数都是_icv开头是,其实很值得一看)。3,发现Opencv的bug,及时的修正保证自己程序的健壮。我的Opencv和刚安装的已经有很大的区别了,就是偶尔发现某处的一些问题,然后修改了,再直接编译。不过我没有注意存记录,弄的现在都不知道什么地方改过。
下一页。
Contact me:
email: ynyu@nlpr.ia.ac.cn
Homepage:www.cbsr.ia.ac.cn/users/ynyu
头像
bebekifis
OpenCV教授
 
帖子: 1238
注册: 2007-03-03 20:50
地址: 辐射场

Re: Opencv感想和一些分享

帖子bebekifis » 2009-07-13 10:48

首先先推荐几篇供大家学习Opencv的文章吧,这些文章是一些经典的算法,它们在Opencv上已经有了具体的实践。这些算法原理比较简单,可以用来作为学习Opencv的算法(通过算法学代码)。这里所说的读代码是要深入函数的内部,了解代码运行的步骤,而不仅仅是会用个别函数:
1,Adaptive background mixture models for real-time tracking ---> 对应Opencv代码:CvGaussBGModel等。
2,Computer vision face tracking as a component of a perceptual user interface ---> cvCamShift等。
3,EM cluster --->CvEM 这个算法很简单,网上到处都有算法介绍。
4,计算机视觉那本书 ---> cvFindHomography, 根据多对点计算图像的投影变换矩阵。计算机标定和三维重建经常用到。
5,An Introduction To the Kalman Filter ---> CvKalman等
6,SIFT ---> Opencv算法版置顶里Rob Hess的SIFT代码,很值得一看,个人感觉非常好的SIFT代码。
先写这么多,把这些算法的Opencv实现完全看懂了Opencv大体上就没问题了。
Contact me:
email: ynyu@nlpr.ia.ac.cn
Homepage:www.cbsr.ia.ac.cn/users/ynyu
头像
bebekifis
OpenCV教授
 
帖子: 1238
注册: 2007-03-03 20:50
地址: 辐射场

Re: Opencv感想和一些分享

帖子bebekifis » 2009-07-13 11:03

下面介绍一个改动Opencv代码实现更有用的功能的方法

图像的直方图均匀化在做光照均衡时十分有用,但实际上直方图规定话其实更有用,Opencv里面只提供了直方图均匀化的代码cvEqualizeHist
在这个函数的基础上稍加改动,就能得到直方图规定化的代码:
代码: 全选
void cvMatchHist( const CvArr* src, CvArr* dst, CvHistogram * histdst )
{
   CvHistogram* hist = 0;
   CvMat* lut = 0, *lutG = 0, *lutZ = 0;
   CvHistogram * histeq = NULL;

   CV_FUNCNAME( "cvMatchHist" );

   __BEGIN__;

   cvCopyHist( histdst, &histeq );
   cvNormalizeHist(histeq, 1.0);

   int i, hist_sz = 256;
   CvSize img_sz;
   float scale;
   float* h, *hG;
   int sum = 0;
   int type;

   CV_CALL( type = cvGetElemType( src ));
   if( type != CV_8UC1 )
      CV_ERROR( CV_StsUnsupportedFormat, "Only 8uC1 images are supported" );

   CV_CALL( hist = cvCreateHist( 1, &hist_sz, CV_HIST_ARRAY ));
   CV_CALL( lut = cvCreateMat( 1, 256, CV_8UC1 ));
   CV_CALL( lutG = cvCreateMat( 1, hist_sz, CV_8UC1 ));
   CV_CALL( lutZ = cvCreateMat( 1, hist_sz, CV_8UC1 ));
   CV_CALL( cvCalcArrHist( (CvArr**)&src, hist ));
   CV_CALL( img_sz = cvGetSize( src ));
   scale = 255.f/(img_sz.width*img_sz.height);
   h = (float*)cvPtr1D( hist->bins, 0 );
   hG = (float*)cvPtr1D( histeq->bins, 0 );
   for(i = 0; i < 256; i++)
   {
      sum += cvRound(hG[i]*255);
      lutG->data.ptr[i] = (uchar)cvRound(sum);
   }
   sum = 0;
   for( i = 0; i < hist_sz; i++ )
   {
      sum += cvRound(h[i]);
      lut->data.ptr[i] = (uchar)cvRound(sum*scale);
   }
   for (i = 0; i < 256; i++)
   {
      int k = 0;
      while(lutG->data.ptr[k] < i)
      {
         k++;
      }
      lutZ->data.ptr[i] = k;
   }
   lut->data.ptr[0] = 0;
   CV_CALL( cvLUT( src, dst, lut ));
   CV_CALL( cvLUT( dst, dst, lutZ ));

   __END__;

   cvReleaseHist(&hist);
   cvReleaseMat(&lut);
   cvReleaseMat(&lutG);
   cvReleaseMat(&lutZ);
   cvReleaseHist(&histeq);
}
Contact me:
email: ynyu@nlpr.ia.ac.cn
Homepage:www.cbsr.ia.ac.cn/users/ynyu
头像
bebekifis
OpenCV教授
 
帖子: 1238
注册: 2007-03-03 20:50
地址: 辐射场

Re: Opencv感想和一些分享

帖子bebekifis » 2009-07-13 11:20

一个bug:
CvBoost里的一个内存泄漏问题:
CvBoost在clear()函数中有一个成员变量没有被释放:
将clear函数改为:
代码: 全选
    if( weak )
    {
        prune( CV_WHOLE_SEQ );
        cvReleaseMemStorage( &weak->storage );
    }
    if( data )
        delete data;
    weak = 0;
    data = 0;
    cvReleaseMat( &orig_response );
    cvReleaseMat( &sum_response );
    cvReleaseMat( &weak_eval );
    cvReleaseMat( &subsample_mask );
    cvReleaseMat( &weights );
   cvReleaseMat(&subtree_weights);
    have_subsample = false;

即可
Contact me:
email: ynyu@nlpr.ia.ac.cn
Homepage:www.cbsr.ia.ac.cn/users/ynyu
头像
bebekifis
OpenCV教授
 
帖子: 1238
注册: 2007-03-03 20:50
地址: 辐射场

Re: Opencv感想和一些分享

帖子p200702108 » 2009-07-13 12:39

很实用的帖子。 :lol:
==============================
上联:说你行,你就行,不行也行
下联:说不行,就不行,行也不行
横批:不服不行

==============================

-------my email:034080116@163.com-------
头像
p200702108
OpenCV博士生
 
帖子: 405
注册: 2009-03-23 16:14

Re: Opencv感想和一些分享

帖子ollydbg23 » 2009-07-13 12:43

赞牛人!
关于修改和编译之类的内容,推荐你使用SVN的版本管理,这样子。
不过我没有注意存记录,弄的现在都不知道什么地方改过。

的问题,应该是可以得到很容易的定位。

这么好的帖子,建议你放入wiki里面!!!
本人不接受站内私人短信讨论技术问题,有问题请发贴讨论!!!
提问的智慧 OpenCV论坛中文搜索 论坛精华区
头像
ollydbg23
OpenCV教授
 
帖子: 2581
注册: 2008-04-13 9:16

Re: Opencv感想和一些分享

帖子feixiaolin » 2009-07-13 16:34

ollydbg23 写道:赞牛人!
……
这么好的帖子,建议你放入wiki里面!!!

这正是我所期待的。
建议ollydbg23先做置顶处理。
学习OpenCV的三种境界:
(1)乘客级。不会造飞机,会坐飞机也行。将刘、于书中的代码跑一遍;
(2)厨师级。吃自助餐。把OpenCV当成菜或佐料,自己烹调;
(3)天师级。做张天师,这时OpenCV不过是一个披着画皮的女鬼。
头像
feixiaolin
OpenCV教授
 
帖子: 1138
注册: 2008-07-13 15:26

Re: Opencv感想和一些分享

帖子zhaoqin » 2009-07-13 22:47

谢谢。
zhaoqin
OpenCV硕士生
 
帖子: 229
注册: 2008-10-29 21:47

Re: Opencv感想和一些分享

帖子ollydbg23 » 2009-07-14 8:48

feixiaolin 写道:
ollydbg23 写道:赞牛人!
……
这么好的帖子,建议你放入wiki里面!!!

这正是我所期待的。
建议ollydbg23先做置顶处理。

我没有置顶权限,呵呵。估计只有yu版大才有。
本人不接受站内私人短信讨论技术问题,有问题请发贴讨论!!!
提问的智慧 OpenCV论坛中文搜索 论坛精华区
头像
ollydbg23
OpenCV教授
 
帖子: 2581
注册: 2008-04-13 9:16

Re: Opencv感想和一些分享

帖子bingpo » 2009-07-17 10:03

修改记录,像dbg32说的,自己建个版本库。
另外,beyond compare或vimdiff这类文件比较工具要学会用,一目了然,两个版本一比较就知道改了什么。
再不济,自己的所有修改都加上带特殊标识的注释,搜索一下就知道。
另外,有些操作系统和编译方面的基础之后,配合一个好的工具(像vim或是source insight),看代码更加得心应手。
bingpo
OpenCV博士生
 
帖子: 358
注册: 2008-11-23 13:10

Re: Opencv感想和一些分享

帖子jjunfan » 2009-08-11 10:22

EM cluster --->CvEM 这个算法很简单,网上到处都有算法介绍。。。。
晕,我在网上找不到呀,你有什么资料能共享下吗,现在正需要用这个,谢谢

bebekifis 写道:首先先推荐几篇供大家学习Opencv的文章吧,这些文章是一些经典的算法,它们在Opencv上已经有了具体的实践。这些算法原理比较简单,可以用来作为学习Opencv的算法(通过算法学代码)。这里所说的读代码是要深入函数的内部,了解代码运行的步骤,而不仅仅是会用个别函数:
1,Adaptive background mixture models for real-time tracking ---> 对应Opencv代码:CvGaussBGModel等。
2,Computer vision face tracking as a component of a perceptual user interface ---> cvCamShift等。
3,EM cluster --->CvEM 这个算法很简单,网上到处都有算法介绍。
4,计算机视觉那本书 ---> cvFindHomography, 根据多对点计算图像的投影变换矩阵。计算机标定和三维重建经常用到。
5,An Introduction To the Kalman Filter ---> CvKalman等
6,SIFT ---> Opencv算法版置顶里Rob Hess的SIFT代码,很值得一看,个人感觉非常好的SIFT代码。
先写这么多,把这些算法的Opencv实现完全看懂了Opencv大体上就没问题了。
jjunfan
OpenCV小学生
 
帖子: 18
注册: 2009-07-14 17:46

Re: Opencv感想和一些分享

帖子Shiqi Yu » 2009-08-18 17:16

ollydbg23 写道:
feixiaolin 写道:
ollydbg23 写道:赞牛人!
……
这么好的帖子,建议你放入wiki里面!!!

这正是我所期待的。
建议ollydbg23先做置顶处理。

我没有置顶权限,呵呵。估计只有yu版大才有。

我一直以为你有这个权限的 :oops:
1. 发帖时请详细描述您遇到的问题,不要仅仅用“出错”,“有问题”,“不行”等没有信息含量的描述。
2. 标题中扼要描述你的问题,不要用“新手请教”之类没有信息含量的标题。
3. 不要“哭求”,“跪求”,男儿有泪不轻弹,男儿膝下有黄金。
4. 技术问题请发在板面,不要给我发送私人短信,其他问题欢迎给我发信。
头像
Shiqi Yu
站点管理员
 
帖子: 2119
注册: 2006-09-27 17:58
地址: 蛇口

Re: Opencv感想和一些分享

帖子Shiqi Yu » 2009-08-18 17:21

Shiqi Yu 写道:
ollydbg23 写道:我没有置顶权限,呵呵。估计只有yu版大才有。

我一直以为你有这个权限的 :oops:

好像phpbb中的版主都不可以置顶 :twisted:

phpbb连精华功能都没有,请问有什么好的论坛系统推荐?
1. 发帖时请详细描述您遇到的问题,不要仅仅用“出错”,“有问题”,“不行”等没有信息含量的描述。
2. 标题中扼要描述你的问题,不要用“新手请教”之类没有信息含量的标题。
3. 不要“哭求”,“跪求”,男儿有泪不轻弹,男儿膝下有黄金。
4. 技术问题请发在板面,不要给我发送私人短信,其他问题欢迎给我发信。
头像
Shiqi Yu
站点管理员
 
帖子: 2119
注册: 2006-09-27 17:58
地址: 蛇口

Re: Opencv感想和一些分享

帖子ollydbg23 » 2009-08-18 17:54

我帮忙找找吧,呵呵,不过最近海底电缆断了,连国外的要命了。。。 :(
本人不接受站内私人短信讨论技术问题,有问题请发贴讨论!!!
提问的智慧 OpenCV论坛中文搜索 论坛精华区
头像
ollydbg23
OpenCV教授
 
帖子: 2581
注册: 2008-04-13 9:16

Re: Opencv感想和一些分享

帖子ollydbg23 » 2009-08-18 17:59

我在自己的wiki里面建了一个精华区,但是感觉弄起来挺麻烦的,如果要是论坛自身能提供这个功能,那一定就很爽了,呵呵。
本人不接受站内私人短信讨论技术问题,有问题请发贴讨论!!!
提问的智慧 OpenCV论坛中文搜索 论坛精华区
头像
ollydbg23
OpenCV教授
 
帖子: 2581
注册: 2008-04-13 9:16

Re: Opencv感想和一些分享

帖子Shiqi Yu » 2009-08-19 9:16

ollydbg23 写道:我帮忙找找吧,呵呵,不过最近海底电缆断了,连国外的要命了。。。 :(

多谢啦

迁移网站系统需要解决两个问题:
1. 能整体从phpbb3导入
2. 新论坛系统能够跟meidawiki系统集成。

第一个问题应该好解决,第二个可能有点麻烦。
1. 发帖时请详细描述您遇到的问题,不要仅仅用“出错”,“有问题”,“不行”等没有信息含量的描述。
2. 标题中扼要描述你的问题,不要用“新手请教”之类没有信息含量的标题。
3. 不要“哭求”,“跪求”,男儿有泪不轻弹,男儿膝下有黄金。
4. 技术问题请发在板面,不要给我发送私人短信,其他问题欢迎给我发信。
头像
Shiqi Yu
站点管理员
 
帖子: 2119
注册: 2006-09-27 17:58
地址: 蛇口

Re: Opencv感想和一些分享

帖子guhuxiang » 2009-08-19 15:13

赞一个!喜欢于老师这种风格!
学习中……
guhuxiang
OpenCV小学生
 
帖子: 7
注册: 2009-08-17 10:08

Re: Opencv感想和一些分享

帖子leeward » 2009-09-04 16:17

学习
头像
leeward
OpenCV幼儿园宝宝
 
帖子: 5
注册: 2006-10-03 15:16

Re: Opencv感想和一些分享

帖子tina » 2009-09-08 17:31

谢谢楼上!学习了!
tina
OpenCV幼儿园宝宝
 
帖子: 3
注册: 2009-07-08 17:01

Re: Opencv感想和一些分享

帖子心飞翔 » 2009-09-12 16:18

看了下作者主页上的做图像匹配的视频链接,精度不感说,速度确实特别的快,不知道作者用的是啥方法?
SIFT、SURF吗?我觉得都做不了作者这么快!
心飞翔
OpenCV幼儿园宝宝
 
帖子: 5
注册: 2007-09-09 10:57

Re: Opencv感想和一些分享

帖子nuaaconstant » 2009-09-14 15:17

好贴!!!我们这等菜鸟需要这样的文字说明。纯代码没法琢磨。赞!!!!!!
nuaaconstant
OpenCV初中生
 
帖子: 34
注册: 2009-09-11 9:30

Re: Opencv感想和一些分享

帖子bebekifis » 2009-09-17 14:02

心飞翔 写道:看了下作者主页上的做图像匹配的视频链接,精度不感说,速度确实特别的快,不知道作者用的是啥方法?
SIFT、SURF吗?我觉得都做不了作者这么快!


底层算法是用SIFT的,实际的系统中要考虑光照,视角(包括尺度变化),目前只有SIFT能做到高精度(实际正如你所说的还不是很精确),这个没办法和人眼的定位比,现在还在努力中。。。
实际的系统做处理的时间大概是70-80ms,刚开始的是用硬盘中的视频做的,后来从摄像头直接采集,光用Opencv读视频就需要50ms。随后用多线程来做,一个读视频,一个做处理,现在能做到80-90ms。实际的效果比Demo上的稍微慢点。

继续努力。
Contact me:
email: ynyu@nlpr.ia.ac.cn
Homepage:www.cbsr.ia.ac.cn/users/ynyu
头像
bebekifis
OpenCV教授
 
帖子: 1238
注册: 2007-03-03 20:50
地址: 辐射场

Re: Opencv感想和一些分享

帖子happyday0106 » 2009-09-17 14:28

开始静下心来向你们学习啊!好贴。
happyday0106
OpenCV幼儿园宝宝
 
帖子: 3
注册: 2009-07-19 22:00

Re: Opencv感想和一些分享

帖子shanleo1986 » 2009-09-17 17:13

好帖子,值得我们这些菜鸟学习!问一下,想里面的一些基本函数,比如(打个比方,不一定时这个)像:cvLoadImage()函数需要看他的实现代码吗?初学者会用这些函数就行了吧?
shanleo1986
OpenCV初中生
 
帖子: 28
注册: 2009-06-13 10:42

Re: Opencv感想和一些分享

帖子心飞翔 » 2009-09-18 15:12

bebekifis » 很佩服你, 我的SIFT 现在大概要800ms/640*480. 比你的差远了. 不过我一直没时间搞,没准也能时间有提高,嘎嘎.
另外,你算透视矩阵用的啥算法啊? RANSAC, 现在都是用这个算法吗?
心飞翔
OpenCV幼儿园宝宝
 
帖子: 5
注册: 2007-09-09 10:57

下一页

回到 OpenCV新兵

在线用户

正在浏览此版面的用户:Google [Bot], lq0104, MSN [Bot], ollydbg23 和 5 位游客