2011-07-20 13 views
1

これは愚かな質問と思われるかもしれませんが、乗算後の行列の出力サイズに問題があります。行列Aがm * nで行列BがJ * kならば、基本的には、 出力マトリックスのcvMulTransposedとDimensions?

ので以下自分のコードに応じて.. Mサイズ* kのこと:その転置は9行2列の行列の右側になるよう

CvMat *meh, *meh2; 
    meh = cvCreateMat(2, 9, CV_32FC1); 
    meh2 = cvCreateMat(2, 2, CV_32FC1); 
    cvMulTransposed(meh, meh2, 1); 
    cvSave("meh.txt", meh2); 

MEHは、2行、9列の行列でありますか?それらの乗算は2行2列行列(2 * 9に9 * 2を掛けたもの)を与える。

と、それは私が私の出力行列として作成されたものです、meh2。これは、出力をテキストに保存されている。

見ることができるように
%YAML:1.0 
meh: !!opencv-matrix 
    rows: 2 
    cols: 2 
    dt: f 
    data: [ -431602080., -431602080., -431602080., -431602080. ] 

そのジャンク値で埋め..

が、出力を9 * 9の行列にするコードを変更すると、保存されたファイルの実際の乗算値を見ることができます。

ここで、乗算後の出力行列は、最初の行列と2番目の列を持ちませんか?

乾杯

+0

あなたの質問はあまり意味がありません。あなたはデータを初期化していないので、もちろんあなたは迷惑メールの値を取得します。あなたの質問は何ですか? – etarion

答えて

0

これは、関数の宣言です:

dst = scale* transpose[(src-delta)] * (src-delta) 

あなたが使用している場合:ご注文= 1を使用

void cvMulTransposed(const CvArr* src, CvArr* dst, int order, const CvArr* delta=NULL, double scale=1.0) 

は、それは乗算は次のように行われることを意味します次数0の場合、乗算は次のようになります。

dst = scale* (src-delta) * transpose[(src-delta)] 
0あなたのケースでは

注文= 1を使用して、最後の行列は次のとおりです。

(9,2)  x  (2,9)  = (9,9) 
transpose  not transpose  result 

This is where you can get the documentation of the function

+0

ありがとう:)ドキュメントのその部分を読んだが、重要な点を逃したように思えた。それを指摘してくれてありがとう:) – StuckInPhD

+0

サー、あなたはスタックオーバーフローに関する質問をし、私たちはあなたに答えます。哲学の一部はアップホートや回答を受け入れることです...私はベガではありませんが、このプロセスに従っていただければ幸いです。 – jmartel

+0

申し訳ありませんが、私はupvotingを試みましたが、そのための評判は15です。私は受け入れボタンがあることを知らなかった:p – StuckInPhD

関連する問題