cv::InputArrayの使い方

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

コメントする