2012-01-09 9 views
2

イメージを既に含んでいるビットマップ配列を持っているので、それを操作するためにopenCVオブジェクトを構築する必要があります。私が見るコンストラクタは、OpenCV、ビットマップからイメージオブジェクトを作成

cv::imread(fileName...); 

です。既存の構造からイメージを作成する他の方法はありますか?

OpenCVの2.3

答えて

3

データ、画像チャネル、および寸法へのポインタを取得し、そこに多くの、多くのコンストラクタのいずれかを使用します。

ここ
Mat image(width, height, CV_8UC3, ucharDataPtr); 

、CV_8UC3は、インデックス・データ型にOpenCVの方法です。 8は8ビットを意味し、Uは符号なしを意味する - したがって、デフォルトの画像フォーマットであるunsigned charです。 C3は3チャンネルを意味します。ビットマップにアルファチャンネルがある場合は、CV_8UC4と記述します。それが灰色の場合はCV_8UC1などとなります。

重要:

このコンストラクタは、データをコピーしません。したがって、マットを使用している間は、元のビットマップオブジェクトを生かしておいてください。コピーする場合は、コンストラクタに "withCopyパラメータ"があります。単にドキュメントをチェックしてください。

+0

データをコピーする場合は、マットイメージ(幅、高さ、CV_8UC3、ucharDataPtr).clone()。 –

0

だけ配列にIplImageへ又はれるCvMatを指します。以下のようれるCvMatの構造は以下の通りである:

CvMat      // 2D array 
    |-- int type;   // elements type (uchar,short,int,float,double) and flags 
    |-- int step;   // full row length in bytes 
    |-- int rows, cols; // dimensions 
    |-- int height, width; // alternative dimensions reference 
    |-- union data; 
     |-- uchar* ptr;  // data pointer for an unsigned char matrix 
     |-- short* s;  // data pointer for a short matrix 
     |-- int* i;  // data pointer for an integer matrix 
     |-- float* fl;  // data pointer for a float matrix 
     |-- double* db;  // data pointer for a double matrix 

(http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html)

関連する問題