opencv 编程总结与备忘

14 篇文章 0 订阅

参考

矩阵数据类型转换

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

基本矩阵运算

基本图像处理

记时

  • 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 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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值