2017-01-15 16 views
0

OpenCv 2.4.10でC++のフレーム間に距離行列を構築しようとしています。私はマットのマットが必要だと思うので、すべてのフレームを最初の行に置き、フレームごとにXOR演算子を作ります。しかし、そうするには、それぞれの位置に別の行列を含む行列のような構造が必要です。マットのマットのようなものはありますか?または、別のソリューションを提案できますか?私はVectorを使うことを考えましたが、Matの配列以上が必要です。ありがとう、私はこれで新しいです!OpenCv C++でMatを作成する

答えて

0

私が正しく見つけたら、2次元のMatオブジェクトです。各オブジェクトは別の2次元のMatオブジェクトです。これは、4次元のMatオブジェクトを作成するのと同じです。 OpenCVのは、このような機能を持っている - それだけであまり人気の少ない便利なマットコンストラクタの1つを使用することを含む:

const int num_of_dim = 4; 
const int dimensions[num_of_dim] = { a, b, c, d }; // a, b, c, d - desired dimensions defined elsewhere 
cv::Mat fourd_mat(num_of_dim, dimensions, CV_32F); 

チェックマット::マットOpenCVのドキュメントで、(int型ndims、constのint型*サイズ、int型)コンストラクタ:

http://docs.opencv.org/2.4.10/modules/core/doc/basic_structures.html#Mat::Mat(int%20ndims,%20const%20int *%20sizes、%20int%20type)

だけでなく、より多くの例やドキュメントを検索する語句「多次元」と「n次元」というページ上の検索。

EDIT:

要求されたように、私はこのような構造にイメージをロードする方法を示しています。それはきれいではありませんが、私は最も簡単な方法は、ピクセルで画像のピクセルをコピーすることであると思います。

img = imread("path/img.jpg", 1); 
for (int i = 0; i < 179; ++i) 
{ 
    for (int j = 0; i < img.rows; ++i) 
    { 
     for (int k = 0; j < img.cols; ++j) 
     { 
      const int coords1[4] = { i, 0, j, k }; 
      const int coords2[4] = { 0, i, j, k }; 
      fourd_mat.at<float>(coords1) = img.at<float>(j, k); //line 1 
      fourd_mat.at<float>(coords2) = img.at<float>(j, k); //line 2 
     } 
    } 
} 

ラインLINE1があなたのラインSTRUTTURAと等価であるとして、[I] [0] = IMGコメント。およびライン2は、と同等です。struttura [0] [i] = img;の2つの最も内側のforループが終了した後。それは8UCだ場合、あなたは(で UCHAR フロートを交換する必要が)機能 -

上記のコードは、あなたのイメージの種類がCV_32Fであることを前提としています。

+0

ありがとうございます。私はそれを調べてお知らせします。 – stardust

+0

ねえ、これはあなたが探していたものですか? – KjMag

関連する問題