OpenCV C++ 项目开发 知识点积累
2012-04-06 08:23
609 查看
OpenCV :
imshow(“dis window”, matImg) : 中直接命名窗口进行显示即可.不必提前创建窗口和使用完毕后释放窗口资源.
Size( width, height) : Size(宽,高) : 参数先(宽, 高) ,而不是Mat等数据类型的(高, 宽) .该函数创建二维的大小向量.
resize(srcImage, desImage, dSize, resScale, resScale, INTER_LINEAR) : 直接实现图像的缩放功能.
Mat *desMatImg : Mat图像指针,类同IplImage* .可以作为参数传递地址,具有普通指针的功能.
string *desImg : string 类型指针,具备普通指针的功能,作为参数,被函数改变其值.
RGB 格式 图像的 保存顺序 是 BGR
void cvMoveWindow(const char* name, int x, int y) : 移动窗口位置
cv::Mat ,cv::MatND 是同一类型: typedef cv::Mat cv::MatND. 考虑到很多函数没有检查矩阵维数,在用openCV处理3维,4维等高维矩阵时要小心。
cvLoadImage(char*/const char* path, CV_LOAD_IMAGE_ANYCOLOR): 路径参数可以是char* /const char*
指针总结 : (1) 库类型对象的地址.包括IplImage , Mat.
(2) 需要调用某类型对象,将其传递给函数作参数,以在函数中改变其内存值的情况下,都要使用指针类型.
包括: Mat ,string 等这样的类型.
(3) 定义时不使用非空地址数据初始化时,初始化为NULL.
(4) 对于OpenCV中Mat数据自动释放,当转化为IplImage* 时,该IplImage不可使用cvReleaseImage释放. 且该类型使用完毕应该赋为NULL;
代码:
C++ :
1 string.earase(size_type begin, size_type offset) :
擦出string字符串开始到偏移长度的内容;
imgNameExtStr.erase(0, imgNameExtStr.size()) --- 删除string类型变量所有的内容.
2 cout<<*charPointer 只可以输出char*所指字符串的首字符.
imshow(“dis window”, matImg) : 中直接命名窗口进行显示即可.不必提前创建窗口和使用完毕后释放窗口资源.
Size( width, height) : Size(宽,高) : 参数先(宽, 高) ,而不是Mat等数据类型的(高, 宽) .该函数创建二维的大小向量.
resize(srcImage, desImage, dSize, resScale, resScale, INTER_LINEAR) : 直接实现图像的缩放功能.
Mat *desMatImg : Mat图像指针,类同IplImage* .可以作为参数传递地址,具有普通指针的功能.
string *desImg : string 类型指针,具备普通指针的功能,作为参数,被函数改变其值.
RGB 格式 图像的 保存顺序 是 BGR
void cvMoveWindow(const char* name, int x, int y) : 移动窗口位置
cv::Mat ,cv::MatND 是同一类型: typedef cv::Mat cv::MatND. 考虑到很多函数没有检查矩阵维数,在用openCV处理3维,4维等高维矩阵时要小心。
cvLoadImage(char*/const char* path, CV_LOAD_IMAGE_ANYCOLOR): 路径参数可以是char* /const char*
string mgNameExtStr = “G:\\WorkSpace\\FileOperation\\resizedImage\\fluor2_CandleWithHolder_037.jpg”; cvLoadImage(imgNameExtStr.c_str(), CV_LOAD_IMAGE_ANYCOLOR);
IplImage* iplPtr :可以先定义(默认指向NULL),后赋值.
指针总结 : (1) 库类型对象的地址.包括IplImage , Mat.
(2) 需要调用某类型对象,将其传递给函数作参数,以在函数中改变其内存值的情况下,都要使用指针类型.
包括: Mat ,string 等这样的类型.
(3) 定义时不使用非空地址数据初始化时,初始化为NULL.
(4) 对于OpenCV中Mat数据自动释放,当转化为IplImage* 时,该IplImage不可使用cvReleaseImage释放. 且该类型使用完毕应该赋为NULL;
代码:
IplImage *resIplPtr = NULL; { for (int disLoop = 0; disLoop < srcImgNum; disLoop++) { srcImg = imread(strImgVec[disLoop]); // read image; resizeMatImg(&resImg, srcImg, 256); // resize image; if (disLoop == 0) { cout<<"resize image size : "<<resImg.cols<<" "<<resImg.rows<<endl<<endl; } namedWindow("src dis",CV_WINDOW_AUTOSIZE); // display image; namedWindow("res dis",CV_WINDOW_AUTOSIZE); cvMoveWindow("src dis", 270,300); cvMoveWindow("res dis", 10,10); imshow("src dis", srcImg); imshow("res dis", resImg); waitKey(1000); cout<<"Image "<<(disLoop + 1)<<" info"<<endl; imgNameExtStr.erase(0, imgNameExtStr.size()); // 每次清理缓存字符串;erase the cache string ; //strNameExtr(strImgVec[disLoop], &imgNameExtStr, imgNameExt); // extract the image name string and add the extension ;根据路径提取图像名称,加后缀.; strNameExtr(strImgVec[disLoop], &imgNameExtStr, jpgImgNameExt); // extract the image name string and add the extension ;根据路径提取图像名称,加后缀.; imwrite(imgNameExtStr, resImg); // save the resized image as jpeg image format;这里的存储格式有问题;120DPI不能被JSEG处理; //IplImage *imgLoadTest = cvLoadImage(imgNameExtStr.c_str(), CV_LOAD_IMAGE_ANYCOLOR); IplImage resIplImg = resImg; // 创建IplImage头,共享Mat数据.并未开辟额外的IplImage空间和拷贝数据,所以这个IplImage用完后不可以释放内存.; //IplImage *resIplPtr = &resIplImg; // 因为JSEG中使用的是IplImage数据,所以这里转化为IplImage*类型; resIplPtr = &resIplImg; // 因为JSEG中使用的是IplImage数据,所以这里转化为IplImage*类型; cvNamedWindow("ipl img show",CV_WINDOW_AUTOSIZE); cvShowImage("ipl img show",resIplPtr); //cvShowImage("ipl img show",&resIplImg); //cvShowImage("ipl img show",imgLoadTest); waitKey(1000); cvDestroyWindow("ipl img show"); imgFthNameVec.push_back(imgNameExtStr); cout<<imgFthNameVec[disLoop]<<endl<<endl; resIplPtr = NULL; }
C++ :
1 string.earase(size_type begin, size_type offset) :
擦出string字符串开始到偏移长度的内容;
imgNameExtStr.erase(0, imgNameExtStr.size()) --- 删除string类型变量所有的内容.
2 cout<<*charPointer 只可以输出char*所指字符串的首字符.
相关文章推荐
- VC2010 + C++ + OpenCV 项目开发环境搭建 —— OpenCV 无法打开包括文件 找不到头文件问题
- 开发OpenCV+Qt+C++项目过程中遇到的问题及查找的答案
- 项目开发知识点总结
- Linux上用Eclipse CDT开发c++项目的实例
- 【C/C++开发】值得学习的C语言开源项目
- C++程序设计课程同步项目开发——前言
- c++学习过程中积累的知识点
- 【开发日记】C#调用C++图像处理算法(opencv)
- 智能设备的C#和C++的混合项目开发心得(非托管的DLL函数调用)
- iOS开发-项目 知识分享与经验积累(一)
- Qt Creator 开发opencv 纯 C++程序
- 手把手教你使用 Clion 开发 Linux C++ 项目
- eclipse安装C++工程环境----CDT环境————eclipse开发openCV环境准备1
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- 项目开发中值得推荐的C/C++框架和库总结
- Ubuntu12.04 安装eclipse 并配置OpenCV (C/C++项目)
- Java进阶(二十六)公司项目开发知识点回顾
- 最近进行项目开发积累的一些编程经验
- [电子书]C++敏捷开发/OpenCV+MFC显示图像/视频
- 如何在linux下开发C++项目