[转]《学习opencv》笔记——矩阵和图像操作——cvOr,cvOrS,cvrReduce,cvRepeat,cvScale,cvSet and cvSetZero

 

原文地址:http://blog.csdn.net/zhurui_idea/article/details/28878011

 

矩阵和图像的操作

 
(1)cvOr函数

其结构

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. void cvOr(//两个矩阵对应元素做或运行  
  2.     const CvArr* src1,//矩阵1  
  3.     const CvArr* src2,//矩阵2  
  4.     CvArr* dst,//结果矩阵  
  5.     const CvArr* mask = NULL//矩阵“开关”  
  6. );  

实例代码
[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #include <cv.h>  
  2. #include <highgui.h>  
  3. #include <stdio.h>  
  4.   
  5. int main(int argc, char** argv)  
  6. {  
  7.     IplImage *src1, *src2,*src3;  
  8.     src1 = cvLoadImage("1.jpg");  
  9.     src2 = cvLoadImage("9.jpg");  
  10.     src3 = cvLoadImage("7.jpg");  
  11.   
  12.     cvOr(src1,src2,src3);  
  13.   
  14.     cvShowImage( "测试1", src1);  
  15.     cvShowImage( "测试2", src2);  
  16.     cvShowImage( "测试3", src3);  
  17.     cvWaitKey();  
  18.     return 0;  
  19. }  

输出结果

(2)cvOrS函数

其结构

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. void cvOr(//矩阵与给定标量做或运算  
  2.     const CvArr* src1,//矩阵1  
  3.     CvScalar value,//给定变量  
  4.     CvArr* dst,//结果矩阵  
  5.     const CvArr* mask = NULL//矩阵“开关”  
  6. );  

实例代码
[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #include <cv.h>  
  2. #include <highgui.h>  
  3. #include <stdio.h>  
  4.   
  5. int main(int argc, char** argv)  
  6. {  
  7.     IplImage *src1, *src2;  
  8.     src1 = cvLoadImage("1.jpg");  
  9.     src2 = cvLoadImage("7.jpg");  
  10.   
  11.     CvScalar cs;  
  12.     cs.val[0] = 0;  
  13.     cs.val[1] = 255;  
  14.     cs.val[2] = 0;  
  15.     cs.val[3] = 0;  
  16.   
  17.     cvOrS(src1,cs,src2);  
  18.   
  19.     cvShowImage( "测试1", src1);  
  20.     cvShowImage( "测试2", src2);  
  21.     cvWaitKey();  
  22.     return 0;  
  23. }  

输出结果

(3)cvReduce函数

其结构

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. CvSize CvReduce(//完成由op指定的约简  
  2.     const CvArr* src,//目标矩阵  
  3.     CvArr* dst,//结果矩阵  
  4.     int dim = -1,//因子系数,//1合并成行,0合并成列,-1转化成对应的dis  
  5.     int op = CV_REDUCE_SUM//指定约简法则  
  6. );  

ps:其中的op代表的转换操作
op的值 结果
CV_REDUCE_SUM 计算所有向量的总和
CV_REDUCE_AVG 计算所有向量的平均值
CV_REDUCE_MAX 计算所有向量中的最大值
CV_REDUCE_MIN 计算所有向量中的最小值

实例代码

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #include <cv.h>  
  2. #include <highgui.h>  
  3. #include <stdio.h>  
  4. #include <iostream>  
  5. using namespace std;  
  6.   
  7.   
  8. int main()   
  9. {   
  10.     double a[5][5] =   
  11.     {      
  12.         {1,0,0,0,6},  
  13.         {0,2,0,7,0},  
  14.         {0,0,3,0,0},  
  15.         {0,9,0,4,0},  
  16.         {8,0,0,0,5}  
  17.     };  
  18.   
  19.     double b[5] = {0};  
  20.       
  21.     CvMat va=cvMat(5,5, CV_64FC1,a);  
  22.   
  23.     CvMat vb=cvMat(5,1, CV_64FC1,b);  
  24.   
  25.     cout<<"目标矩阵:"<<endl;  
  26.   
  27.     for(int i=0;i<5;i++)  
  28.     {  
  29.         for(int j=0;j<5;j++)  
  30.             printf("%f ",cvmGet(&va,i,j));  
  31.         cout << endl;  
  32.     }  
  33.   
  34.     cvReduce(&va,&vb,1,CV_REDUCE_SUM);  
  35.   
  36.     cout << "结果向量"<<endl;  
  37.   
  38.     for(int i=0;i<5;i++)  
  39.     {  
  40.             printf("%f ",cvmGet(&vb,i,0));  
  41.         cout << endl;  
  42.     }  
  43.   
  44.     getchar();  
  45.     return 0;  
  46. }  

输出结果

(4)cvRepeat函数

其结构

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. void cvRepeat(//复制图像  
  2.     const CvArr* src,//目标矩阵  
  3.     CvArr* dst//结果矩阵  
  4. );  

实例代码
[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #include <cv.h>  
  2. #include <highgui.h>  
  3. #include <stdio.h>  
  4. #include <iostream>  
  5. using namespace std;  
  6.   
  7.   
  8. int main()   
  9. {   
  10.     IplImage *src1, *src2,*src3;  
  11.     src1 = cvLoadImage("1.jpg");  
  12.     src2 = cvLoadImage("7.jpg");  
  13.   
  14.     cvRepeat(src1,src2);  
  15.   
  16.     cvShowImage( "测试1", src1);  
  17.     cvShowImage( "测试2", src2);  
  18.     cvWaitKey();  
  19.     return 0;  
  20. }  

输出结果

(5)cvScale函数

其结构

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. void cvScale(//进行线性变换转换  
  2.     const CvArr* src,//输入矩阵  
  3.     CvArr* dst,//输出矩阵  
  4.     double scale,//比例因子  
  5.     double shift = 0.0//放缩比例  
  6. );  

实例代码
[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #include <cv.h>  
  2. #include <highgui.h>  
  3. #include <stdio.h>  
  4. #include <iostream>  
  5. using namespace std;  
  6.   
  7.   
  8. int main()   
  9. {   
  10.     IplImage* src1 = cvLoadImage("1.jpg",CV_LOAD_IMAGE_GRAYSCALE);    
  11.   
  12.     IplImage* src2 = cvCloneImage(src1);    
  13.   
  14.     IplImage* dst = cvCreateImage(cvGetSize(src1),IPL_DEPTH_64F,src1->nChannels);    
  15.   
  16.     double max_Val,min_Val;    
  17.     cvScale(src1,dst,1.0,0.0);    
  18.     cvAdd(dst,dst,dst);    
  19.   
  20.     cvMinMaxLoc(dst, &min_Val, &max_Val, NULL, NULL, NULL);    
  21.   
  22.     cvScale(dst,src2,1.0,0.0);    
  23.   
  24.     cvScale(dst, dst, 1.0/(max_Val-min_Val), 1.0*(-min_Val)/(max_Val-min_Val));  
  25.   
  26.     cvMinMaxLoc(dst, &min_Val, &max_Val, NULL, NULL, NULL);    
  27.   
  28.     cvShowImage("测试1",src1);    
  29.   
  30.     cvShowImage("测试2",src2);    
  31.   
  32.     cvShowImage("结果",dst);    
  33.   
  34.     cvWaitKey(-1);    
  35.     return 0;  
  36. }  

输出结果

(6)cvSet函数

其结构

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. void cvSet(//对图像中的像素设置value  
  2.     CvArr* arr,//目标矩阵  
  3.     CvScalar value,//设置值  
  4.     const,CvArr* mask = NULL//图像开关  
  5. );  

实例代码
[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #include <cv.h>  
  2. #include <highgui.h>  
  3. #include <stdio.h>  
  4.   
  5. int main()   
  6. {   
  7.     IplImage *src1, *src2;  
  8.     src1 = cvLoadImage("1.jpg");  
  9.     src2 = cvLoadImage("1.jpg");  
  10.   
  11.     CvScalar cs;  
  12.     cs.val[0] = 0;  
  13.     cs.val[1] = 0;  
  14.     cs.val[2] = 255;  
  15.     cs.val[3] = 0;  
  16.       
  17.     cvSet(src1,cs);  
  18.   
  19.     cvShowImage( "结果图", src1);  
  20.     cvShowImage( "原图", src2);  
  21.     cvWaitKey();  
  22.     return 0;  
  23. }  

输出结果

(7)cvSetZero函数

其结构

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. void cvSetZero(//对图像自动设置为零,相当于cvSet(0.0)  
  2.     CvArr* arr,//目标矩阵  
  3. );  

实例代码
[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #include <cv.h>  
  2. #include <highgui.h>  
  3. #include <stdio.h>  
  4.   
  5. int main()   
  6. {   
  7.     IplImage *src1, *src2;  
  8.     src1 = cvLoadImage("1.jpg");  
  9.     src2 = cvLoadImage("1.jpg");  
  10.   
  11.     CvScalar cs;  
  12.     cs.val[0] = 0;  
  13.     cs.val[1] = 0;  
  14.     cs.val[2] = 255;  
  15.     cs.val[3] = 0;  
  16.       
  17.     cvSetZero(src1);  
  18.   
  19.     cvShowImage( "结果图", src1);  
  20.     cvShowImage( "原图", src2);  
  21.     cvWaitKey();  
  22.     return 0;  
  23. }  

输出结果

to be continued

原文地址:https://www.cnblogs.com/Crysaty/p/6509243.html