我是java中的Opencv新手。问题是每当我尝试将两个Mat类型的维度(m x n)和(n x l)对象相乘时,它就会给出错误。
OpenCV错误:输入参数的大小不匹配(操作既不是'数组操作数组'(其中数组具有相同的大小和相同数量的通道),也不是'数组操作标量',也不是'标量操作数组' ')在cv :: arithm_op中,文件........ \ opencv \ modules \ core \ src \ arithm.cpp,第1287行 线程“main”中的异常CvException [org.opencv.core.CvException:cv :: Exception:........ \ opencv \ modules \ core \ src \ arithm.cpp:1287:错误:( - 209)该操作既不是'数组操作数组'(其中数组具有相同的大小和相同数量的通道),也不是'数组操作标量',也不是函数cv :: arithm_op中的'标量操作数组' ]
这是我的两个矩阵。
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);
答案 0 :(得分:4)
Mat.mul()执行每个元素多重复制(与Core.multiply()相同),并且两个Mat都需要具有相同的维度。
你明显想要的是'矩阵乘法'。
虽然这在c ++中是一个简单的mat*vec
,但在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());
[2.1210001, 0.70700002]