[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
工程LINMAX26
2015-12-15 21:10:49 显示全部楼层

马上注册,玩转Robomaster!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
声明:本文转自 http://blog.csdn.net/cheng1988shu/article/details/5783634#   Opencv感想和一些分享



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

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

下面介绍一个改动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*255);  
  •       lutG->data.ptr = (uchar)cvRound(sum);  
  •    }  
  •    sum = 0;  
  •    for( i = 0; i < hist_sz; i++ )  
  •    {  
  •       sum += cvRound(h);  
  •       lut->data.ptr = (uchar)cvRound(sum*scale);  
  •    }  
  •    for (i = 0; i < 256; i++)  
  •    {  
  •       int k = 0;  
  •       while(lutG->data.ptr[k] < i)  
  •       {  
  •          k++;  
  •       }  
  •       lutZ->data.ptr = 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);  
  • }  

跳转到指定楼层

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
梯队队员king最帅
2017-1-18 12:54:30 显示全部楼层
RoboMasters,一个为青年工程师打造的机器人竞技平台,参赛队员走出课堂,组成机甲战队,独立研发、制作机器人参与射击对抗。他们将通过大赛获得宝贵的实践技能和战略思维,...

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
梯队队员枫度翩翩
2018-1-25 16:11:10 显示全部楼层
                                                         

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
工程机械狗
2015-12-17 00:48:46 显示全部楼层
看贴回贴是一种美德

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
英雄Destiny
2015-12-19 22:10:22 显示全部楼层
赞!!大赞
回复

使用道具 举报

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
梯队队员白石榴树
2016-1-16 14:41:04 显示全部楼层
总结的很精简,希望楼主有时间的话还要多分享啊,感觉还有很多收获没有说完意犹未尽的样子

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
工程无血九痕
2016-5-4 23:10:16 显示全部楼层
总结的还是蛮不错的  还是要继续好好学习啊

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
步兵YUmaster
2016-5-6 09:21:35 显示全部楼层
6666666666666

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
正式队员amygdala
2016-7-27 21:47:31 显示全部楼层
革命圣徒
回复

使用道具 举报

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
正式队员1+1
2016-12-7 21:16:52 显示全部楼层
谢谢笔者的分享

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
梯队队员维言
2016-12-18 20:18:22 显示全部楼层
不错,前车之鉴

[视觉算法] 【分享帖】Opencv感想和一些分享

[复制链接]
正式队员熵测试
2017-1-10 15:55:09 显示全部楼层
好评,,要多多理解代码的原理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

触屏版 | 电脑版

Copyright © 2024 RoboMasters 版权所有 备案号 粤ICP备2022092332号

快速回复 返回顶部 返回列表