前回,cv::InputArray/cv::OutputArrayについて書いたが,今回はcv::InputArrayを入力とする関数の作り方について書く.
cv::InputArrayで受け取ったものは,中身はcv::Matやstd::vectorだがそのままでは使えない.
cv::InputArrayのkind()という関数を使うことで,もともと何型だったのかを知ることができる.
使えるのは,
MAT
MATX
STD_VECTOR
STD_VECTOR_VECTOR
STD_VECTOR_MAT
EXPR
OPENGL_BUFFER
OPENGL_TEXTURE
GPU_MAT
OCL_MAP
使うときは,cv::InputArrayクラスのgetMat()やgetMatVector()を呼び出し,cv::Matやstd::vector
void showImg(cv::InputArray in){
cv::Mat img=in.getMat();
// 以降,元がstd::vectorだろうとcv::Matとして使える
cv::imshow("img",img);
cv::waitKey();
}
getMatVector()の方は,cv::Matの配列になるので,
void printImgs(cv::InputArray in){
std::vector<cv::Mat> imgs;
in.getMatVector(imgs);
for(auto img: imgs){
std::cout << img << std::endl;
}
}
という感じで使える.上記関数にcv::Matを渡すと,各行からなるcv::Matが配列に格納され,行ごとに画面に出力される.