最終更新:
mikk_ni3_92 2010年02月13日(土) 17:23:21履歴
現在地 >> メニュー >> OpenCV >> C++インターフェイス編02
INDEX:C++インターフェイス編01 <<C++インターフェイス編02 >> C++インターフェイス編03?
OpenCV2.0からは「cv::Matクラス」が用意されている。
これは、従来の「IplImage」や「CvMat」のかわりとなっている。
IplImageやCvMatと異なり、メモリは自動的に破棄するようになっている。
また、簡単にIplImageやCvMatに変換する事ができる。
保存にほcv::imwriteというのがあるが、2.0時点でのリファレンスをみると細かな制限があるっぽい。
(シングルチャンネルでもPNG, JPG 2000, TIFF の場合は 16ビットとか)
素直にcvSaveImageがいいかもしれない。
【例】
なお画像データは共有状態となる。
「cv::Matクラス」はIplImage型やCvMat型の変数に対し「=」で代入するだけで変換して扱う事ができる。
ただし、画像データそのものはコピーせず、共有状態となる。
【例】
cv::Matを破棄しても他のオブジェクトがデータを参照できる状態の場合、
cv::Matオブジェクトが破棄されても、データは破棄されない。
INDEX:C++インターフェイス編01 <<C++インターフェイス編02 >> C++インターフェイス編03?
OpenCV2.0からは「cv::Matクラス」が用意されている。
これは、従来の「IplImage」や「CvMat」のかわりとなっている。
IplImageやCvMatと異なり、メモリは自動的に破棄するようになっている。
また、簡単にIplImageやCvMatに変換する事ができる。
【例】
const std::string filename("building.png"); int main() { cv::Mat imgB; imgB = cv::imread(filename); if( !imgB.data ) { std::cerr << "Can't Load Image\n"; return -1; } cv::namedWindow(filename); cv::imshow(filename,imgB); cv::waitKey(); return 0; //デストラクタによりメモリが破棄される }
保存にほcv::imwriteというのがあるが、2.0時点でのリファレンスをみると細かな制限があるっぽい。
(シングルチャンネルでもPNG, JPG 2000, TIFF の場合は 16ビットとか)
素直にcvSaveImageがいいかもしれない。
【例】
cv::Mat imgB; imgB = cv::imread(filename); … … IplImage output = imgB;//画像データは共有状態 cvSaveImage("testout.png",&output);▲このように「=」を使って簡単にIplImageにすることができる。
なお画像データは共有状態となる。
「cv::Matクラス」はIplImage型やCvMat型の変数に対し「=」で代入するだけで変換して扱う事ができる。
ただし、画像データそのものはコピーせず、共有状態となる。
【例】
cv::Mat imgB; … … IplImage ipl_imgA = imgB;//画像データはコピーしない。共有状態となっている。
cv::Matを破棄しても他のオブジェクトがデータを参照できる状態の場合、
cv::Matオブジェクトが破棄されても、データは破棄されない。
cv::Ptr<IplImage> imgA = cvLoadImage(filename.c_str()); … … { cv::Mat imgB(imgA);//データは共有状態 … … }//cv::Matオブジェクトはここで破棄される。しかし画像データは破棄されない。
- C++インターフェイス編02::まとめ(読み込み、表示)
- C++インターフェイス編02::まとめ2(cv::Matオブジェクトの破棄とメモリ管理)