1. 程式人生 > >C++中cv::Mat的一種“切片”的方法

C++中cv::Mat的一種“切片”的方法

使用OpenCV + C++的過程中,有時我們想對Mat結構進行類似於python和Matlab中的切片的操作,例如取指定的幾行幾列或區域。在最近的學習的過程中,我們注意到了OpenCV提供的一種類似於切片的操作,Rect()函式,該函式可以很好的幫助我們取指定的一片區域的資料。

cv::Rect(x, y, width, height)函式的引數為4個,x和y分別表示所取區域的起始座標,width和height分別表示所取區域的寬度和長度。據此,我們可寫出如下測試程式碼:

double m[3][3] = 
	{ {1, 2, 3},
	  {4 ,5, 6},
	  {7 ,8, 9},
	};
cv::Mat testMat(3,3,CV_64FC1,m);
cout << testMat << endl;
cv::Mat A=testMat(cv::Rect(0,0,2,3));
cout << A << endl;

testMat:
[1, 2, 3;
 4, 5, 6;
 7, 8, 9]
A:
[1, 2;
 4, 5;
 7, 8]

輸出結果如上所示,我們得到的矩陣A為矩陣testMat的從(0, 0)為起始點,寬度為2長度為3的子區域,即第一列與第二列。

通過該函式,我們可以簡單的實現“切片”的功能,可以比較便捷的取所矩陣中需要的行向量或列向量,甚至是一個子矩陣。