矩阵和图像的操作

(1)cvInRange函数

其结构

  1. void cvInRange(//提取图像中在阈值中间的部分
  2. const CvArr* src,//目标图像
  3. const CvArr* lower,//阈值下限
  4. const CvArr* upper,//阈值上限
  5. CvArr* dst//结果图像
  6. );

实例代码

  1. #include <cv.h>
  2. #include <highgui.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. IplImage *src1,*src2,*dst11,*dst12,*dst13,*dst21,*dst22,*dst23;
  10. src1=cvLoadImage("5.jpg");
  11. src2=cvLoadImage("7.jpg");
  12. dst11 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
  13. dst12 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
  14. dst13 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
  15. dst21 = cvCreateImage(cvSize(src2->width, src1->height), IPL_DEPTH_8U, 1);
  16. dst22 = cvCreateImage(cvSize(src2->width, src1->height), IPL_DEPTH_8U, 1);
  17. dst23 = cvCreateImage(cvSize(src2->width, src1->height), IPL_DEPTH_8U, 1);
  18. cvSplit(src1, dst11, dst12, dst13, 0);
  19. cvSplit(src2, dst21, dst22, dst23, 0);
  20.  
  21. cvInRange(dst12,dst21,dst23,dst23);
  22. cvShowImage( "原图", src1);
  23. cvShowImage("过滤图",src2);
  24. cvShowImage( "结果图", dst23);
  25.  
  26. cvWaitKey();
  27. return 0;
  28. }

输出结果

(2)cvInRangeS函数

其结构

  1. void cvInRangeS(//提取图像中在阈值中间的部分
  2. const CvArr* src,//目标图像
  3. CvScalar lower,//阈值下限
  4. CvScalar upper,//阈值上限
  5. CvArr* dst//结果图像
  6. );

实例代码

  1. #include <cv.h>
  2. #include <highgui.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. IplImage *src1,*src2,*dst11,*dst12,*dst13,*dst21,*dst22,*dst23;
  10. src1=cvLoadImage("5.jpg");
  11. dst11 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
  12. dst12 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
  13. dst13 = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
  14.  
  15. CvScalar cs1;
  16. cs1.val[0] = 0;
  17. cs1.val[1] = 0;
  18. cs1.val[2] = 0;
  19. cs1.val[3] = 0;
  20. CvScalar cs2;
  21. cs2.val[0] = 80;
  22. cs2.val[1] = 0;
  23. cs2.val[2] = 0;
  24. cs2.val[3] = 0;
  25.  
  26. cvSplit(src1, dst11, dst12, dst13, 0);
  27.  
  28. cvInRangeS(dst11,cs1,cs2,dst13);
  29. cvShowImage( "原图", src1);
  30. cvShowImage( "变单通过程图", dst11);
  31. cvShowImage( "结果图", dst13);
  32.  
  33. cvWaitKey();
  34. return 0;
  35. }

输出结果

(3)cvInvert函数

其结构

  1. double cvInvert(//矩阵取逆
  2. const CvArr* src,//目标矩阵
  3. CvArr* dst,//结果矩阵
  4. int method = CV_LU//逆运算方法
  5. );

当中method有

方法的參数值 含义
CV_LU 高斯消去法
CV_SVD 神秘值分解
CV_SVD_SYM 对称矩阵的SVD

实例代码

  1. #include <cv.h>
  2. #include <highgui.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. double a[3][3] =
  10. {
  11. {1,0,0},
  12. {0,2,0},
  13. {0,0,3}
  14. };
  15.  
  16. CvMat va = cvMat(3,3, CV_64FC1,a);
  17.  
  18. cout<<"目标矩阵:"<<endl;
  19.  
  20. for(int i=0;i<3;i++)
  21. {
  22. for(int j=0;j<3;j++)
  23. printf("%f\t",cvmGet(&va,i,j));
  24. cout << endl;
  25. }
  26.  
  27. cvInvert(&va,&va);
  28.  
  29. cout << "其逆矩阵为:";
  30. cout<<endl;
  31. for(int i=0;i<3;i++)
  32. {
  33. for(int j=0;j<3;j++)
  34. printf("%f\t",cvmGet(&va,i,j));
  35. cout << endl;
  36. }
  37. getchar();
  38. return 0;
  39.  
  40. }

输出结果

(4)cvMahalonobis函数

其结构

  1. CvSize cvMahalonobis(//计算马氏距离
  2. const CvArr* vec1,//样本向量
  3. const CvArr* vec2,//平均值
  4. CvArr* mat//协方差的逆
  5. );

ps:关于什么是马氏向量,我也研究了半天,找了一些资料算是弄明确了个大概。

        关于马氏距离,定义的话自己百度百科即可。

关于理解和解释请參照博客:点击打开链接 通俗易懂

关于以下的代码实例的数据来源:点击打开链接

实例代码

  1. #include <cv.h>
  2. #include <highgui.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. double a1[4] = {3,4,5,6};
  10. double a2[4] = {2,2,8,4};
  11.  
  12. double b[4] = {2.5, 3, 6.5, 5};
  13.  
  14. double c[4][4] =
  15. {
  16. {0.25,0.50,-0.75,0.50},
  17. {0.50,1.00,-1.50,1.00},
  18. {-0.75,-1.50,2.25,-1.50},
  19. {0.50,1.00,-1.50,1.00}
  20. };
  21. CvMat va1 = cvMat(1,4, CV_64FC1,a1);
  22. CvMat va2 = cvMat(1,4, CV_64FC1,a2);
  23. CvMat vb = cvMat(1,4, CV_64FC1,b);
  24. CvMat vc = cvMat(4,4, CV_64FC1,c);
  25.  
  26. cvInvert(&vc,&vc,CV_SVD); //协方差取逆,这个函数前面讲过
  27.  
  28. double r1 = cvMahalanobis(&va1,&vb,&vc);
  29. double r2 = cvMahalanobis(&va2,&vb,&vc);
  30. cout << "样本1的马氏距离:"<<endl;
  31. cout<<r1<<endl;
  32. cout << "样本2的马氏距离:"<<endl;
  33. cout<<r2<<endl;
  34.  
  35. getchar();
  36. return 0;
  37. }

输出实例

to be continued

《学习opencv》笔记——矩阵和图像操作——cvInRange,cvInRangeS,cvInvert and cvMahalonobis的更多相关文章

  1. 《学习opencv》笔记——矩阵和图像操作——cvCalcCovarMatrix,cvCmp and cvCmpS

    矩阵和图像的操作 (1)cvCalcCovarMatrix函数 其结构 void cvCalcCovarMatrix(计算给定点的均值和协方差矩阵 const CvArr** vects,//给定向量 ...

  2. 《学习opencv》笔记——矩阵和图像操作——cvSetIdentity,cvSolve,cvSplit,cvSub,cvSubS and cvSubRS

    矩阵和图像的操作 (1)cvSetIdentity函数 其结构 void cvSetIdentity(//将矩阵行与列相等的元素置为1.其余元素置为0 CvArr* arr//目标矩阵 ); 实例代码 ...

  3. 《学习opencv》笔记——矩阵和图像操作——cvAnd、cvAndS、cvAvg and cvAvgSdv

    矩阵和图像的操作 (1)cvAnd函数 其结构 void cvAnd( //将src1和src2按像素点取"位与运算" const CvArr* src1,//第一个矩阵 cons ...

  4. 《学习opencv》笔记——矩阵和图像操作——cvAbs,cvAbsDiff and cvAbsDiffS

    矩阵和图像的操作 (1)cvAbs,cvAbsdiff,cvAbsDiffS 它们的结构为: void cvAbs( //取src中元素的绝对值,写到dst中 const CvArr* src, co ...

  5. 《学习opencv》笔记——矩阵和图像操作——cvCrossProduct and cvCvtColor

    矩阵和图像的操作 (1)cvCrossProduct函数 其结构 void cvCrossProdust(//计算两个三维向量的叉积 const CvArr* src1, const CvArr* s ...

  6. 《学习opencv》笔记——矩阵和图像操作——cvConvertScale,cvConvertScaleAbs,cvCopy and cvCountNonZero

    矩阵和图像的操作 (1)cvConvertScale函数 其结构: void cvConvertScale( //进行线性变换,将src乘scale加上shift保存到dst const CvArr* ...

  7. opencv笔记2:图像ROI

    time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...

  8. OpenCV —— 矩阵和图像操作

    cvAbs , cvAbsDiff , cvAbsDiffS cvAdd , cvAddS , cvAddWeighted(可添加权重) #include <cv.h> #include ...

  9. OpenCV利用矩阵实现图像旋转

    利用OpenCV的矩阵操作实现图像的逆时针旋转90度操作 代码 Mat src = imread("C:\\Users\\fenggl\\Desktop\\测试.jpg",MREA ...

随机推荐

  1. **后台怎么处理JSON数据中含有双引号?

    http://bbs.csdn.net/topics/390578406?page=1 注意是后台,不是用js另外我这个json是直接取得别人的传过来的字符串,不是我自己拼写的,所以我自己不能做到转义 ...

  2. 减小VirtualBox虚拟硬盘文件的大小

    虚拟机使用久了就会发现虚拟硬盘越来越大,但是进入虚拟机里的系统用命令看了下,实际占用的空间远没有虚拟硬盘大小那么大,这个让人很不爽,而且在分享虚拟机镜像的时候也很不方便.VirtualBox似乎没有提 ...

  3. JDBC连接池和DBUtils

    本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采取连接池技术,来共享连接Conne ...

  4. mysql 5.1 下载地址 百度云网盘下载

    mysql 百度云下载 链接: https://pan.baidu.com/s/1fPSEcgtDN7aU2oQ_sL08Ww 提取码: 关注公众号[GitHubCN]回复2539获取

  5. php 根据ip获取城市以及网络运营商名称(利用qqwry.dat)

    根据用户IP地址判定出所在城市以及网络运营商 qqwry.dat下载地址:http://files.cnblogs.com/guangxiaoluo/qqwry.rar  解压出来即可 //获取用户真 ...

  6. jquery跨域请求事例

    //js发送跨域请求部分var requesturl = 'url'; $.ajax({ type:'GET', url:requesturl, data:{'qNum':num}, dataType ...

  7. require demo 记录备份

    预览地址 http://127.0.0.1:8020/requireDemo/myNEW/index.html 注意 远程的 非模块的 empty: demo2

  8. 【LOJ】#2062. 「HAOI2016」地图

    题解 我对莫队真是一无所知 这个东西显然可以用圆方树转成一个dfs序列 然后呢,用莫队计算每个询问区间的每个数出现的次数,从而顺带计算每个数字的奇偶性 但是我们要查的数字也用一个范围,可以直接用分块维 ...

  9. USACO 5.1 Fencing the Cows

    Fencing the CowsHal Burch Farmer John wishes to build a fence to contain his cows, but he's a bit sh ...

  10. WordCount_命令行运行时指定参数

    WordCountApp命令行运行时指定参数 1.修改之前的WordCountApp.java的代码 package cmd; import java.net.URI; import org.apac ...