Mat类中的rowRange和colRange的用法

版权声明:本文为@那年聪聪 原创文章,未经博主允许不得转载。 https://blog.csdn.net/duan19920101/article/details/53418699

Mat.rowRange(int x,int y)和Mat.rowRange(range(int x,int y)得到的结果一样,函数取的实际行数y-x,只取到范围的左边界,而不取右边界。

特别注意:网上好多的文章虽然测试结果正确,但是结论却是错误的,曾被误导的飘过~

#include<stdio.h>
#include<opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
 //初始化一个3*3的矩阵
 Mat examples=(Mat_<float>(3,3)<<1,0,0,0,1,0,0,0,1);
 //取example中中特定范围的行列构成矩阵
 Mat temp_row1=examples.rowRange(Range(1,2));  //取特定行
 Mat temp_row2=examples.rowRange(1,2);
 Mat temp_col=examples.colRange(1,3);         //取特定列
 //n,p,m,q计数,用于控制矩阵元素的输出格式
 int n=0;
 int p=0;
 int m=0;
 int q=0;
 //输出初始矩阵的元素
 cout<<"examples:"<<endl;
 for (int i=0;i<examples.rows;i++){
  for(int j=0;j<examples.cols;j++)
  {
   cout<<examples.at<float>(i,j) ;
   p++;
   if(p%3==0)cout<<endl;  
  }
 }
 cout<<endl;
 //测试rowRange(Range(int x,int y))
 cout<<"temp_row1:"<<endl;
 for (int i=0;i<temp_row1.rows;i++)
 {
  for(int j=0;j<temp_row1.cols;j++){
   cout<<temp_row1.at<float>(i,j);
   n++;
   if(n%3==0) 
    cout<<endl;
  }
 }
 cout<<endl;
 //测试rowRange(int x,int y)函数
 cout<<"temp_row2:"<<endl;
 for(int i=0;i<temp_row2.rows;i++)
 { 
  for(int j=0;j<temp_row2.cols;j++){
   cout<<temp_row2.at<float>(i,j);
   m++;
   if(m%3==0) 
    cout<<endl;
  }
 }
 cout<<endl;
 //测试colRange(int x,int y)函数
 cout<<"temp_col:"<<endl;
 for (int i=0;i<temp_col.rows;i++)
 {
  for(int j=0;j<temp_col.cols;j++){
   cout<<temp_col.at<float>(i,j);
   q++;
   if(q%2==0) 
    cout<<endl;
  }
 }
 return 0;
}

测试结果


说明:代码来自网络。

猜你喜欢

转载自blog.csdn.net/duan19920101/article/details/53418699
今日推荐