cv::InputArrayの使い方

Pocket

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

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください