cv::InputArrayとcv::OutputArray

OpenCVの新しいバージョン(3.0)では,様々なところで変更があって,いろんなアルゴリズムが入出力としてcv::InputArrayとcv::OutputArrayを使うようになっている.

cv::InputArray/cv::OutputArrayは,std::vectorやcv::Matやstd::vectorなどを統一的に扱えるようにしたもの.

なので,例えば cv::threshold だと,cv::Matを入力として

cv::Mat img, out;
cv::threshold(img, out, 10, 255, cv::THRESH_BINARY);

このように使ったり,std::vectorを入力として

std::vector<double> img;
cv::Mat out;
cv::threshold(img, out, 10, 255, cv::THRESH_BINARY);

このように使うことができる.

また,受け取る側のcv::OutputArrayも同様なので,先ほどの例だと受け取る側を

cv::Mat img;
std::vector<unsigned char> out;
cv::threshold(img, out, 10, 255, cv::THRESH_BINARY);

のようにstd::vectorにしたりもできる.

次回はこのようなcv::InputArray/cv::OutputArrayを入出力とする関数を自作する方法について書く.