首先这个是一篇学习生涯的总结文,偏技术向,写给自己,incidentally 看看自己这段时间干什么了,又怎么往前走,go elsewhere。
整天埋头看书给我最大的感受就是:然后呢,学习一种从来没听过的东西是一种什么样的体验。大多数估计就是这样子:从没听说过,到听说了,然后“奥”。
接下来就是更煎熬的事情,要有极大的耐心坚持。也是一个目的,就是——embody your principles in actions。 这是我的原则,喜欢多做少说。接下来开始总结了。。。
一、什么是opencv?
第一次听说,心里嘀咕,这到底是个什么玩意? 后来通过练手才知道,说白了就是个函数库。它是 C 函数、 C++ 类构成,很多通用算法是处理图像的。在了解这个过程当中深深体会到了C语言的重要性。。。因为不精通C写点代码真的很尴尬啊
然后就是安装这个软件,然后配置opencv相关的库文件,我的电脑给力,一遍通过。不然就没有后文了。。。
二、在VC或VS编程一定会使用的: 几大头文件。
cv.h
cxcore.h
highgui.h
cvaux.h
ml.h
而且每次编一个东西都要在工程-设置-连接里面添加库文件,做多了不觉得麻烦还有点意思。。。 真是什么心态。。。
三、一般可以开始上手了。跟着人家开始敲代码,一个一个的敲,敲了再想想。
先接触 的是怎么对图像的最基本的处理,一般要显示一张文件夹下的图片,肯定要调用opencv函数来实现,我总结的步骤就是:
1、cv结构体来定义一个指向图片的指针 IplImage* src
2、来加载 cvLoadImage
3、创建窗口cvNamedWindow
4、显示图片在窗口cvShowImage
5、为了图片让你正常看到cvWaitKey(0);
6、释放空间cvReleaseImage
7、释放窗口cvDestroyWindow
四、和图片打交道不知道他们不行啊
第一个就是RGB颜色空间,搞物理的都知道,可是我第一次知道,因为初中高中物理都是不及格。。。这就是涉及到了维数和通道的概念了,几维的,几通道了,现在好像还有点乱。。。
第二个就是HSV颜色空间,h表示颜色的相位角0-360;S表示颜色的饱和度,通俗点,S表示的是某种颜色的“纯度”, 取值越小,表示色彩越灰。V表示色彩的明亮程度,从0到1。V等于0也就是黑色,当V=1并且S=0时表示纯白色; 可以联系两张图一条对角线的那个问题,依然很混乱。。。
在这里还有一个笔记,cvGetReal2D函数不采用,考虑效率问题,大图像尤其不可以。操作的时候不用就是了。
五、开始大胆玩图了,划定感兴趣区域ROI,人脸、车牌等区域相信是最关注的地方,当然局限于老老实实的矩形框范围,并实现替换,这期间我还把曾小贤的脸换到了那个太阳的后裔的那个人脸上。。。也是够了,好玩有木有。。。
丧心病狂的还在后面,图像灰度直方图,二维每一个bin的范围变成了面:0<X<1,0<Y<1。直接分析图像显示三个通道的类似于图像的数据结构,后面可能会用到匹配什么的,反正离不开图了。
颜色空间转换啊,简直是分了合——HSV2BGR,合了分——BGR2HSV,问题是我分了以后在合起来把我的图片蓝色变成了紫红色,直到现在不知道是什么问题,我还在想蓝色离那个紫色在H上不是很近吗,是不是电脑处理带来的误差啊。
六、几个算法:对图像处理最基本的思路了,确实这一块儿玩的挺嗨的,腐蚀erode。膨胀dilate。细化算法。二值化提取轮廓算法。
轮廓匹配cvMatchShapes,这个涉及到概率论,三个矩:原始矩,中心距,HU矩。我觉得开始图像识别了,近了近了。
然后就真的进了一步,从一张图里面的多个形状块进行模板的匹配。这里面不得不说的是,使用比较呆板的按照一个矩形进行平移来匹配比较,所以先了解思路就好。 剩下的优秀算法后面吗,可以自己去找来直接用。
七、关于opencv的视频处理
也是相关的函数cvCreateFileCapture,
frame = cvQueryFrame(capture);
char c = cvWaitKey(33);
if(c==27) break; //ESC
这些我还也得注意下,虽然目前还不了解为什么是这个数字,知道功能就可以了。。。
然后学习视频控制进度控制条的最有意思了,我仿佛觉得自己很高大上,其实也就那样。依然是函数、函数、函数cvSetTrackbarPos ,不过这一块逻辑思维要求很高,因为设置的变量太多,具体去研究代码吧。。。
还有一个小实验,很多图片转化成小视频的我感觉这个没意思,因为毕竟有专业处理的软件,再说这个很渣。。。处理起来为了方便还得把图片命名变得有顺序,方便搞一个数组处理,想想我重命名那些图片也是很累啊 。。。
八、听起来一脸懵逼的HAAR分类器训练
关于Haar分类器方法,包含了某某的算法。分类器在这就是对人脸和非人脸进行分类的算法,在machine learning领域,很多算法都是对事物进行分类、聚类的过程。ml提供了很多分类、聚类的算法。我现在只能浅入浅出 ,根据人家的总结加以梳理归纳。就记得有什么正样本、负样本了samples啊啊啊啊啊啊啊啊。
剩下的接着学习吧,期待自己的成长。