首先你安装好了,然后用一个测试文件(没有测试文件可以找后面教程中的图像显示的代码粘贴),可以正常的运行。
然后还不要着急去学习怎么图像处理,因为还要知道一些常识。
准备知识也是很重要
(1) 模块
在这个文件下D:\ProgramFiles\opencv\build\include\opencv2会看到很多东西,这些都是需要的模块,里面有很多的要用的东西
介绍这个就不说了
因为是图像处理,先不用管那么多的模块,先去认识core imgproc highgui这三个,其他的用到的时候再去看吧
为 什么要看这个三个呢?
一、Core 核心功能模块(核心所以必须要啊),主要包含opencv基本数据结构,动态数据结构,绘图函数,数组操作相关函数,听听这些名字就知道必须要用了
二、Imgproc 这是图像处理模块,既然是处理图像,那也是没的说了
三、Highgui GUI图形用户界面,简单的说,你要用窗口,用界面,什么输入输出了,那你就用他的模块了
(2)#include
正如你经常看到的,每个代码的前面都会有这养的include,包含才可用,学过c++的应该很懂
#include
#include
(3) namespace
还有一个需要注意的是这样的话
using namespace cv;
using namespace std;
因为OpenCV中的C++类和函数都是定义在命名空间cv之内的,想要用,就的提前给人家打声招呼,所以要加上using namespacecv;这个方法比较好,只要一句话就可以,但是如果你加这一句,那么后面如果你要用类和函数的话,你就的这样写,很麻烦,std同理,std是一个类(输入输出标准),它包括了cin成员和cout成员,usingname space std ;以后才能使用它的成员。
image=cv::imread(“lena.jpg”)
cv::nameWindow(“original image”);
cv::imshow(“original image”,image)
(4) argc argv
对于一个程序来说,都会有一个main()函数
例如我们常用的一句话
main(int argv char **argv)
这里的int argc 为整型,用来统计程序运行时,发送给main函数的命令行参数;char **argv 是字符串数组用来存放指向字符串参数的指针数组,每一个元素指向一个参数
imread(argv[1],1),//意思是读取字符串名为argv[1]的图片,argv[1]指向在DOS命令行中执行程序名后的第一个字符串
(5)Mat
自从版本2.0,OpenCV采用了新的数据结构,用Mat类结构取代了之前用extended C写的cvMat和lplImage(在学习代码的时候,会经常看到IplImage),更加好用啦,最大的好处就是更加方便的进行内存管理,对写更大的程序是很好的消息。
如果光说Mat其中就可以是一篇很长的文章,因为用法太多, Mat是OpenCV里最基本的一个类,它用来表示图像,有部分组成,一个是矩阵头,一个是指向存储所有像素值的矩阵的指针,其中幅值与复制只是复制了信息头。下面给出超具体的例子,可以慢慢体会每一个Mat的应用,还有以前一篇写的复制问题可以参考http://blog.csdn.net/qq_20823641/article/details/51452939#include
#include
#include
#include
using namespace std;
using namespace cv;
int main()
{
//Mat() Constructor
Mat M(2,2,CV_8UC3,Scalar(0,0,255));
cout<<"M = "<(3,3)<< 0,-1,0,-1,5,-1,0,-1,0);
cout<<"C = "< v;
v.push_back((float)CV_PI);
v.push_back(2);
v.push_back(3.01f);
cout<<"Vector of floats via Mat = "< vPoints(20);
for(size_t E=0;E
除此之外呢,Mat类还有很多的属性,方便我们理解图像矩阵,例如高度、宽度等
Mat img(3, 4, CV_16UC4, Scalar_(1, 2, 3, 4));
cout <<"img is:"<< img << endl;
cout << "dims:" << img.dims << endl;
cout << "rows:" << img.rows << endl;
cout << "cols:" << img.cols << endl;
cout << "channels:" << img.channels() << endl;
cout << "type:" << img.type() << endl;
cout << "depth:" << img.depth() << endl;
cout << "elemSize:" << img.elemSize() << endl;
cout << "elemSize1:" << img.elemSize1() << endl;
图像识别算法交流 QQ群:145076161,欢迎图像识别与图像算法,共同学习与交流