opencv MAT乘法技巧(java)

时间:2015-07-16 16:57:19

标签: opencv processing mat

我正在尝试进行简单的mat乘法(遵循此example),但它给了我一个非常奇怪的错误。我顺便在处理IDE时实现了这个。

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);

}

这让我在Core.gemm行遇到错误: OpenCV错误:gemm中的断言失败(a_size.width == len),文件/Users/matthewepler/opencv-2.4.5/modules/core/src/matmul.cpp,第718行

这个目录是什么???

我可以使用其他方法来匹配mat对象吗?

我最初的目标是让这样的事情发挥作用:

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

A和B是我想要乘法的垫子......

1 个答案:

答案 0 :(得分:0)

好。这是我第一次使用垫子,我只是按照一个例子。

但问题是Mat形状必须遵循一些规则。请参阅Mat1.col和Mat2.row必须匹配,反之亦然。但我想知道是否还有另一种(更快)的方法。

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);

}