前回,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が配列に格納され,行ごとに画面に出力される.