再读Opencv(1)

来源:互联网 发布:淘宝网鞋子内增高 编辑:程序博客网 时间:2024/06/06 04:01

书读百遍,其义自现。不知道是第几遍看这本书了,虽说是入门版,但收获颇多。速度很明显快多了,一个多小时,把cvcam,cxcore,highgui又看了一遍。

1,highgui只是试验级的接口,只能用于windows,是用vfw技术,读摄像头很慢,有算法的情况下,大概7帧/s。cvcam未来将被淘汰,原因只是他被集成到highgui中,并使用dshow技术。 用dshow读cam,速度提高6倍。一般用的cvCaptureFromCAM就是highgui中的,我觉得在windows下,用cvcam模块还是很必要的,很方便。cvcam也使一个跨平台的模块,我想,也就是多个linux吧,板子上还是用不了。不知道有没有dshow快,有空试试。

2,并不是总要声明指针类型的CvMat*,有时需要CvMat。例如,cvGetRows,cvGetDiag,应该这样用:

CvMat diag;
 cvGetDiag(image,&diag,0);diag是一列数。这样,免去了cvCreateMat等麻烦。diag的空间的开辟放在函数内部,省得手工开辟空间,还得计算大小。

3,何时使用cvLUT,dst=lut(src),仅仅是一个像素值的对应关系而已,可用于直方图变换,像素的目标值仅由原始值决定。

4,cvCalcCovarMatrix,深切感受到,虽然简单,却很强大的功能。协方差和平均值。发现协方差的人真不简单,第一个深刻理解了数据的本质。

5,Mahalanobis,马氏距离。没用到过,但觉得很好的一个想法。大概意思是,一般来说,向量各个元素之间是有相关性的,而欧氏距离没有体现这种相关性,欧氏距离各个元素之间是独立的,即协方差是0。相同欧氏距离下,相关性比较大的两个向量的距离理应比没有相关性的小。这样,马氏距离应运而生。很简单,就是欧式距离乘以协方差之逆。协方差越大,越相关,距离应越小。

6,Kmeans2,解释是网上荡的,说得挺明白。首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。

这里的相思度,即距离,就可以用马氏距离。亦可以用PCA来描述每个聚类。可见,算法是很类似的,数学思想更是不变。理解了矩阵和统计的思想,这些东西很简单。

7,cvSetMemoryManager,我觉得做DSP移植的时候得用到。毕竟,DSP的内存管理不同于PC。近期要做,在考虑中。