最終更新:2020-03-13 (金) 06:00:08 (1467d)
cv::Mat
Top / cv::Mat
- OpenCV 2.0からはC++ Interfaceに対応され、「cv」という名前空間が登場しました。
- これまで画像データはIplImage構造体で管理されていましたが、C++ Interfaceではcv::Matというクラスで管理されるようになります。(従来のIplImageも使用可能です。)
生の画素
- Mat.data
メモ
- Mat(width, height, CV_8UC3, cv::Scalar(255, 255, 255));
メモリの管理
- OpenCVの以前のバージョンと異なり,ほとんどの関数において,関数呼び出しの前に出力用の領域を確保しておく必要はありません. 多くの関数は,関数内で適切なサイズ,型,ビット深度のcv::Matを確保します
- また、cv::Matは,そのデータ領域がどこからも参照されなくなると,自動的にメモリを解放します
- http://opencv.jp/cookbook/opencv_mat.html
タイプ
ベース
複合
1ch 2ch 3ch 4ch (n)ch 8bit unsigned CV_8UC1? CV_8UC2? CV_8UC3 CV_8UC4? CV_8UC(n)? 8bit signed CV_8SC1? CV_8SC2? CV_8SC3? CV_8SC4? CV_8SC(n)? 16bit unsigned CV_16UC1? CV_16UC2? CV_16UC3? CV_16UC4? CV_16UC(n)? 16bit signed CV_16SC1? CV_16SC2? CV_16SC3? CV_16SC4? CV_16SC(n)? 32bit unsigned CV_32UC1? CV_32UC2? CV_32UC3? CV_32UC4? CV_32UC(n)? 32bit signed CV_32SC1? CV_32SC2? CV_32SC3? CV_32SC4? CV_32SC(n)? 32bit float CV_32FC1? CV_32FC2? CV_32FC3? CV_32FC4? CV_32FC(n)? 64bit float CV_64FC1? CV_64FC2? CV_64FC3? CV_64FC4? CV_64FC(n)?
クラス
コンストラクタ
Mat () Mat (int rows, int cols, int type) Mat (Size size, int type) Mat (int rows, int cols, int type, const Scalar &s) Mat (Size size, int type, const Scalar &s) Mat (int ndims, const int *sizes, int type) Mat (int ndims, const int *sizes, int type, const Scalar &s) Mat (const Mat &m) Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP) Mat (Size size, int type, void *data, size_t step=AUTO_STEP) Mat (int ndims, const int *sizes, int type, void *data, const size_t *steps=0) Mat (const Mat &m, const Range &rowRange, const Range &colRange=Range::all()) Mat (const Mat &m, const Rect &roi) Mat (const Mat &m, const Range *ranges)
オペレータ
関数
- cv::Mat::at
- cv::Mat::clone
- cv::Mat::copyTo
- cv::Mat::convertTo
- cv::Mat::begin?
- cv::Mat::channels?
- cv::Mat::col?
- cv::Mat::convertTo
- cv::Mat::create?
- cv::Mat::setTo(InputArray value, InputArray mask=noArray())
- cv::Mat::resize?
- cv::Mat::reverse?
- cv::Mat::zeros
チートシート
基本処理
コピー
- =で代入すると浅いコピーが行われ、データが共有される
- cv::Mat::dataは同じメモリアドレスを指す
- 別データとしてコピーするにはcv::Mat::cloneを使う。
- 内部で新しいcv::Matが生成されれ、cv::Mat::copyToでデータ全体がコピーされる。
OpenCV 4.2.0/OpenCV 3.4.9でIplImageへの変換でエラー
- cvIplImageを使う