【问题标题】:Unable to multiply matrix in opencv java无法在opencv java中乘以矩阵
【发布时间】:2015-01-28 12:01:00
【问题描述】:

我是 Java 中的 Opencv 新手。问题是每当我尝试将两个尺寸为 (m x n) 和 (n x l) 的 Mat 类型对象相乘时,它都会产生错误。

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)该操作既不是“array op array”(其中数组具有相同的大小和相同的通道数),也不是“array op scalar”,也不是函数 cv::arithm_op 中的“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);

【问题讨论】:

    标签: java opencv


    【解决方案1】:

    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]
    

    【讨论】:

    • 非常感谢先生。你帮了很多忙。
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多