opencv 编程总结与备忘

来源:互联网 发布:看漫画用什么软件 知乎 编辑:程序博客网 时间:2024/04/29 20:47

参考

  • opencv 类参考 比官方要全,比如cvBlob官网查不到
  • opencv 官方参考 含入门教学
  • 自己动手制作文档 使用Doxygen自动生成文档
  • opencv 一览图 opencv 快速上手参考
  • opencv + visual studio opencv 在windows + visual studio 下的配置
  • opencv + Qt opencv 在windows + Qt + mingw 下的配置
  • opencv + Qt opencv 在ubuntu 下的配置
  • opencv + Qt + codeblocks opencv 在 windows + Qt + mingw + codeblocks 下的配置
  • opencv + python 在 python 中使用opencv

矩阵数据类型转换

  • 数据类型: CV_8U,CV_16S,CV_32FC1…
  • 函数: convertTo

基本矩阵运算

  • opencv doc: matrix expression
  • csdn: opencv operation on arrays

基本图像处理

  • opencv doc: imgproc. Image Processing
  • csdn: 基本图像处理
  • opencv doc: 中文图像操作翻译

记时

  • getTickCount, getTickFrequency

随机数

  • RNG, randu, randn

求梯度

  • sobel,scharr,filter2d

求边缘

  • findContour,drawContour,ContourArea

Matlab –> OpenCV

//Mat& Mat::setTo(InputArray value, InputArray mask=noArray() )//A(mask)=B(mask)-->A.setTo(B,mask) error,but I don't known why!!!A(mask)=B(mask)-->add(B,0,A,mask)gray=rgb2gray(rgb)-->cvtColor(rgb,gray,CV_BGR2GRAY)

一些错误

常见错误

//错误的初始化color_R.create(input.size(),CV_64FC1);color_R.ones(height,width,CV_64FC1);color_R=color_R*20;double a=color_R.at<double>(0,0);cout<<a<<endl;  //a!=20, a=0 !!!//正确的初始化color_R=Mat::ones(input.size(),CV_64FC1)*20;//vector<Mat> 的错误,当退出程序时,有时会出现segment fault, 可能由于vector改变大小时,重新复制出现了问题吧,不太清楚。string s[]={"hello world","world good","no no no","kkk","fuck","good","hell","go","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};     vector<Mat> mats;     int frameNum=30;     for(int i=0;i<frameNum;i++){          Mat M;          mats.push_back(M);     }     for(int i=0;i<frameNum;i++){          cout<<"s[i]="<<s[i]<<endl;          Mat a=mats[i];          a.create(320,240,CV_8UC1);          a=Scalar::all(0);          a.at<uchar>(100,i)=100;          imshow(s[i],a);          waitKey(30);     }

Mat <–> IplImage

  • Mat vs IplImage
//Mat a;IplImage b=IplImage(a);IplImage *c;c=&b;//IplImage *x;Mat y=cv::Mat(x);

split <–> merge

//BoxUp=input+15;//BoxDown=input-15;Mat img = imread("lena.jpg", CV_LOAD_IMAGE_COLOR);Mat BoxUp=input.clone();Mat BoxDown=input.clone();vector<Mat> inputMats,BoxUpMats,BoxDownMats;split(input,inputMats);split(BoxUp,BoxUpMats);split(BoxDown,BoxDownMats);for(int i=0;i<3;i++){    add(inputMats[i],15,BoxUpMats[i]);    subtract(inputMats[i],15,BoxDownMats[i]);}cv::merge(BoxUpMats,BoxUp);cv::merge(BoxDownMats,BoxDown);
0 0
原创粉丝点击