【问题标题】:opencv MAT multiplication tips (java)opencv MAT 乘法技巧(java)
【发布时间】:2015-07-16 16:57:18
【问题描述】:

我正在尝试做一个简单的 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 是我要相乘的 Mat...

【问题讨论】:

  • 你遇到了什么错误?
  • 对不起,我以为我提到了。我已经编辑了包含错误行的帖子

标签: opencv processing mat


【解决方案1】:

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

但问题是 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);

}

【讨论】:

  • 更快是什么意思?如果第一个矩阵中的列与第二个矩阵中的行不匹配,你将如何将矩阵相乘?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 2021-08-11
  • 2011-04-30
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
相关资源
最近更新 更多