OpenCVのcv::Matにて部分行列をスライスして作るよい方法があったのでご紹介します。
例えば
1 2 3 4 5 6 7 8 9
という行列の、左上の2x2の部分からなる部分行列
1 2 4 5
を作るサンプルは以下の通り。
cv::Mat m1 = (cv::Mat_<double>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9); std::cout << m1 << std::endl; cv::Mat m2 = m1(cv::Rect(0, 0, 2, 2)).clone(); // 部分行列を作成 std::cout << m2 << std::endl;
実行結果は以下の通り。
[1, 2, 3; 4, 5, 6; 7, 8, 9] [1, 2; 4, 5]