conseils de multiplication opencv MAT (java)


J'essaie de faire une simple multiplication mat (en suivant cet exemple ) mais cela me donne une erreur très étrange. J'implémente cela sur le traitement de l'E en passant.

import gab.opencv.*;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.core.Core;

OpenCV opencv;

void setup(){
  size(300,300);
  opencv = new OpenCV(this, width, height);

  Mat r = new Mat(1, 3, CvType.CV_32F);
  r.put(0, 0, 0.707);
  r.put(0, 1, -0.707);
  r.put(1, 0, 0.707);
  r.put(1, 1, 0.707);

  Mat v = new Mat(1, 2, CvType.CV_32F);
  double d1 = 1.00;
  double d2 = 2.00;
  v.put(0, 0, d1);
  v.put(0, 1, d2);
  Mat final_mat = new Mat();

  Core.gemm(v,r,1,new Mat(),0,final_mat);

}

Cela me donne une erreur à la base.ligne gemm: Erreur OpenCV: Échec de l'assertion (a_size.largeur == len) en gemm, fichier /Users/matthewepler/opencv-2.4.5/modules/base/src/matmul.rpc, ligne 718

Quel est ce répertoire???


Puis-je utiliser une autre méthode pour multiplier mat les objets?

Mon objectif initial est de faire fonctionner quelque chose comme ça:

Mat C = ( A.t() * A ).inv(1) * ( A.t() * B );

Où A et B sont le tapis que je veux multiplier...

Author: Bontempos, 2015-07-16

1 answers

Eh bien. C'est la première fois que j'utilise mat, et je viens de suivre un exemple.

Mais la chose est que la forme du tapis doit suivre certaines règles. Tu vois, Mat1.col et Mat2.ligne doit correspondre, ou vice-versa. Mais je voudrais savoir s'il existe un autre moyen(plus rapide) de le faire.

import gab.opencv.*;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.core.Core;


OpenCV opencv;

void setup(){
  size(300,300);
  opencv = new OpenCV(this, width, height);

  Mat r = new Mat(2, 3, CvType.CV_32FC1);
  r.put(0, 0, 0.707);
  r.put(0, 1, -0.707);
  r.put(1, 0, 0.707);
  r.put(1, 1, 0.707);

  Mat v = new Mat(2, 3, CvType.CV_32FC1);
  v.put(0, 0, 0.707);
  v.put(0, 1, -0.707);
  v.put(1, 0, 0.707);
  v.put(1, 1, 0.707);
  v.put(2, 0, 0.707);
  v.put(2, 1, 0.707);


  Mat A = new Mat();
  Mat B = new Mat();
  Mat C = new Mat();

  //C = ( At * A ).inv() * ( At * B ):
  Core.gemm(r.t(),r,1,new Mat(),0,A);
  Core.gemm(r.t(),v,1,new Mat(),0,B);
  Core.gemm(A.inv(),B,1,new Mat(),0,C);

}
 0
Author: Bontempos, 2015-07-16 17:58:08