转载:http://www.opencvchina.com/thread-1756-1-1.html
opencv2 中文参考手册
部分代码展示:
- #include "stdafx.h"
-
- #include "opencv2/opencv.hpp"
-
- /*
- *
- *
- *本代码 www.opencvchina.com 编写 整理
- *
- *仅供opencvchina.com的会员使用
- *
- *如果您不是opencvchina.com的会员,请立即删除该文件。
- */
-
-
- using namespace std;
-
- //使用命名空间 cv
- //在opencv2中,所有的C++接口函数和相关的类,都定义在命名空间cv中。当需要引用时,有两种方法可以实现:
- //(1)在main函数之前 ,注明使用的命名空间
- //(2)在使用相关函数和类的时候 加上前缀cv::
- //例如使用c++接口的Mat类,那么写成:cv::Mat
- using namespace cv;
-
- int main(int argc, char* argv[])
- {
-
- /*************** 矩阵的创建 ******************************************************/
-
- //(1) 定一个Mat类型的对象 其矩阵大小默认是0*0
- Mat image;
- cout<<"矩阵默认大小 height is " <<image.size().height<<", width is "<<image.size().width<<endl;
-
- //(2)自定义矩阵大小 定义高度为100 宽度为200 数据类型为 unsigned char 通道为1 的矩阵 并且初始值为10
- Mat imageSelfDef(100,200,CV_8UC1,Scalar(100));
-
-
- /*************** 图像的加载 显示 与 保存 ***************************************/
-
- //(1)如何读取图像
- Mat imageRead;
- imageRead = imread("1.jpg");
-
- //(2)如何显示图像
- namedWindow("win");
- imshow("win",imageRead);
- waitKey(20);//等待20ms 如果要等待任意长时间 使用waitKey(0);
-
- //(3)如何保存图像
- imwrite("dst.jpg",imageRead);//将图像imageRead 保存为dst.jpg
-
-
-
- /*************** opencv2中的深拷贝 与 浅拷贝 ***************************************/
-
- //(1) opencv2中图像的浅拷贝
- cout<<"opencv2中图像的浅拷贝"<<endl;
-
- Mat imageShallowCopy;
-
- imageShallowCopy = imageRead ; //此时是浅拷贝 imageRead与imageShallowCopy共享数据内存
-
- //输出imageRead与imageShallowCopy的数据地址 可以发现 数据地址是一样的
- cout<<"imageRead的数据起始地址是 "<<static_cast<const void*>(imageRead.data)<<endl;
- cout<<"imageShallowCopy的数据起始地址是 "<<static_cast<const void*>(imageShallowCopy.data)<<endl<<endl;
-
-
- //(2)如何实现图像的深拷贝
- cout<<"opencv2中图像的深拷贝"<<endl;
-
- Mat imageDeepCopy;
-
- imageRead.copyTo(imageDeepCopy); //此时是深拷贝,imageDeepCopy 和 imageRead分别有独立的内存空间
-
- //输出imageRead和imageDeepCopy 的数据起始地址 可以发现 他们是不一样的
- cout<<"imageRead的数据起始地址是 "<<static_cast<const void*>(imageRead.data)<<endl;
- cout<<"imageDeepCopy的数据起始地址是 "<<static_cast<const void*>(imageDeepCopy.data)<<endl<<endl;
-
-
-
- /*************** opencv2中IplImage与Mat ***************************************/
-
- //(1)opencv2中 如何把IplImage转换成 Mat
-
- IplImage* src = cvLoadImage("1.jpg"); //IplImage类型的图像
-
- //把IplImage转换成Mat
- Mat srcToMat(src,false);//参数false表示srcToMat与src共享内存,如果参数是true表示有独立内存
-
- cvReleaseImage(&src);
-
- //(2)如何让IplImage也能自动释放内存 而不是手动调用cvReleaseImage进行释放
- Ptr<IplImage> ptrIplImage = cvLoadImage("1.jpg"); //通过这种方式 内存可以自动释放
-
- return 0;
- }