无法在OpenCV Java中相乘矩阵

Ran*_*eed 2 java opencv

我是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)

ber*_*rak 5

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)

  • 先生非常感谢您。你帮了很多忙。 (2认同)