OpenCV学習ノート:Mat,CvMat,CvArr,IplImageデータ型の相互変換(総括版)


一、説明
①MatはOpenCVとC++のインタフェースマトリクスクラスであり、ImlImageはOpenCVとC言語のインタフェースの構造体であるが、C++プログラムは、MFCのPicture ControlなどのImlImageを用いてピクチャを表示する場合がある.②MatタイプとCvMatタイプとIplImageタイプはいずれも画像を表すことができ、Matタイプは計算に重点を置き、数学性が高い.CvMatとIplImageタイプは「画像」に重点を置いています.③IplImageタイプ画像の最適化は変数origin---原点に現れる.コンピュータの視覚処理において、重要な不便は原点の定義が不明であり、画像源、符号化フォーマット、オペレーティングシステムなどが原点の選択に影響を与えることである.これを補うためにopenCVでは、ユーザーが独自の原点設定を定義できます.値0は、原点が画像の左上隅、1は左下隅にあることを示します.④CvArrが関数パラメータとして使用される場合、CvMatまたはIplImageのタイプのデータ型が入力できることを意味します.CvArr->CvMat->Ipllmageという派生関係があります.⑤Matはクラス(Class)であり、CvMatは構造体(Struct)である.
二、変換
⑴IplImageからMatへ
IplImage* img = cvLoadImage("1.jpg");
Mat img = cvarrToMat(img);//      src   Mat  

(2)MatからIplImage*への移行
Mat mat = imread("1.jpg");
IplImage* img1 = &(IplImage)mat; //   
IplImage *img2 = cvCloneImage(img1);//   ,                 

(3)Mat回転cvArr*
Mat img = imread("1.jpg");
IplImage tmp = IplImage(img);
CvArr* s=(CvArr*)&tmp ;

(4)cvArr*からMatへ
CvArr* img;
Mat img = cv::cvarrToMat(img);

(5)MatからCvMatへの移行
Mat a; 
CvMat b = a; //   
CvMat temp = a; //   CvMat  (      )
CvMat *b;  
cvCopy(&temp, b); //      

(6)CvMatからMatへの移行
CvMat* a;  
Mat b(a);                //       
Mat b(a, false);         //       
Mat b = a;               //      
Mat b = Mat(a, true);    //