这是我网上转载的一篇使用Opencv的注意事项,有共鸣,转载一下!
1 看如下代码:
CvScalar s = cvScalar(20.0);
由于opencv不是真正的类,因此构造函数和类名不一致,构造函数的首字母是小写的!!!!!opencv乃是用C写的,因此尽管含有类的思想,但是不是类,而是结构,不是构造函数,而是内联函数。注意字母的大小写~
2 如果仅是采用opencv而使用C语言编写程序,注意变量的定义在C语言中只能在每一个函数的开头,不能像C++一样在函数的任何位置都可以定义变量~
3 既然C++是基本完全兼容C的,而C++类的特性又十分适合编写大型的程序,完全可以用C++来编写程序,只需新建文件的时候文件后缀名改为.CPP即可。
4 在受用opencv的函数时,一定要注意各个参数是否一致。本人在使用trackbar时由于window的名差一个字母,半天才调对啊~
5 opencv中也存在一个很重要的类:cvImage
6学习OpenCV的三种境界:
(1)乘客级。不会造飞机,会坐飞机也行。将刘、于书中的代码跑一遍;
(2)厨师级。吃自助餐。把OpenCV当成菜或佐料,自己烹调;
(3)天师级。做张天师,这时OpenCV不过是一个披着画皮的女鬼。
7高斯背景建模,在光线可控并且摄像头不懂物体动时使用。否则最好不要使用。
8 opencv访问图像数据的方式
unsigned char * ptr;
for(int i = 0 ;i < img->height;i++){
ptr= (unsigned char*)img->imageData+i*img->widthStep;
for(int j = 0 ; j< img->width; j++){
*(ptr+3*j) -= 20;
*(ptr + 3* j+1) -= 20;
*(ptr + 3*j +2) -= 20;
}
}
再强大的库,也不能覆盖所有的功能,如此对图像数据的访问就是个关键,程序写到深处必然要自己编写算
法,这时就必须去访问图像中的数据。opencv中图像数据的访问主要就是基于指针。由于上述for循环的使用频率很高,因此这里重点关注了一下。
9 原理与库调用
虽然调用库很方便,但是要想灵活运用opencv的库,不懂原理是很困难的。最好学会自己去实现一些基本的算法,如此才能灵活运用。