我正在尝试进行简单的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是我想要乘法的垫子......
答案 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);
}