8 获得Mat中某一区域的值
8.1使用成员函数row(i)或col(j)得到矩阵第i行或者第j列
#include <opencv2/core/core.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(){Mat mat = (Mat_<int>(3, 3) << 1,2,3,4,5,6,7,8,9);Mat mr = mat.row(1);Mat mc = mat.col(1);cout << mat << endl;cout << mr << endl;cout << mc << endl;return 0;
}
8.2使用成员函数rowRange(_start,_end)或colRange(_start,_end)得到矩阵的连续行或者连续列
- Range类,用于构造连续的整数序列,Range(int_start,int_end);
- 左闭右开[_start,_end)
Mat mr = mat.rowRange(Range(2,4));
Mat mr = mat.rowRange(Range(2,4));
#include <opencv2/core/core.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(){Mat mat = (Mat_<int>(5, 5) << 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25);Mat mr = mat.rowRange(Range(2,4));cout << mat << endl;cout << mr << endl;return 0;
}
Mat mr = mat.colRange(2,4);
#include <opencv2/core/core.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(){Mat mat = (Mat_<int>(5, 5) << 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25);Mat mr = mat.colRange(2,4);cout << mat << endl;cout << mr << endl;return 0;
}
8.3改变某行某列的值
mat.at<int>(0,0)=1000;
#include <opencv2/core/core.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(){Mat mat = (Mat_<int>(5, 5) << 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25);cout << mat << endl;mat.at<int>(2,4)=1000;cout << mat << endl;return 0;
}
8.4使用成员函数clone和copyTo
Mat r = mat.rowRange(1,2).clone();
Mat c;
mat.colRange(2, 4).copyTo(c);
#include <opencv2/core/core.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(){Mat mat = (Mat_<int>(5, 5) << 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25);cout << mat << endl;Mat r = mat.rowRange(1,2).clone();Mat c;mat.colRange(2, 4).copyTo(c);cout << r << endl;cout << c << endl;return 0;
}
8.5 使用Rect类
Mat b = mat(Rect(Point(2,1),Point(4,3)));Mat c=mat(Rect(2,1,2,2));Mat d = mat(Rect(Point(2, 1), Size(2, 2)));
#include <opencv2/core/core.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(){Mat mat = (Mat_<int>(5, 5) << 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25);cout << mat << endl;Mat b = mat(Rect(Point(2,1),Point(4,3)));Mat c=mat(Rect(2,1,2,2));Mat d = mat(Rect(Point(2, 1), Size(2, 2)));cout << b << endl;cout << c << endl;cout << d << endl;return 0;
}