• OpenCV C++ 项目开发 知识点积累


    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*

    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*所指字符串的首字符.

  • 相关阅读:
    C# Dictionary几种遍历方式
    Android 代码中文字在手机上显示乱码问题解决方法
    【Android学习5】Clean 之后R文件丢失
    【android学习4】Eclipse中Clean作用
    Java基础语法(练习)
    Java基础语法(自定义类、ArrayList集合)
    Java基础语法(方法)
    Java基础语法(数组)
    Java基础(Scanner、Random、流程控制语句)
    Java基础(变量、运算符)
  • 原文地址:https://www.cnblogs.com/xiangwengao/p/2434018.html
Copyright © 2020-2023  润新知