我是Java新手Opencv。问题是,每当我尝试将两个(mxn)和(nxl)尺寸的Mat类型对象相乘时,就会出现错误。
OpenCV错误:输入参数的大小不匹配(该操作既不是“数组操作数组”(其中数组具有相同的大小和相同的通道数),也不是“数组操作标量”或“标量操作数组”) cv :: arithm_op,文件........ \ opencv \ modules \ core \ src \ arithm.cpp,行1287线程“主”中的异常CvException [org.opencv.core.CvException:cv :: Exception: ........ \ opencv \ modules \ core \ src \ arithm.cpp:1287:错误:(-209)该操作都不是'array op array'(其中数组具有相同的大小和相同的数目通道),也不能在函数cv :: arithm_op中使用“ array op scalar”或“ scalar op array”
这是我的两个矩阵。
Mat r = new Mat(2, 2, 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 mult = new Mat(1, 2, CvType.CV_32F);
double d1 = 1.00;
double d2 = 2.00;
mult.put(0, 0, d1);
mult.put(0, 1, d2);
Mat final_mat = mult.mul(r);
Run Code Online (Sandbox Code Playgroud)
Mat.mul()对每个元素进行乘法(与Core.multiply()相同),并且两个Mat都需要具有相同的尺寸。
您显然想要的是“矩阵乘法”。
尽管这mat*vec在c ++中很简单,但是在Java中,您必须为此使用gemm:
Mat r = new Mat(2, 2, 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);
System.err.println(final_mat.dump());
Run Code Online (Sandbox Code Playgroud)
[2.1210001, 0.70700002]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1489 次 |
| 最近记录: |