gpt4 book ai didi

java - 无法在opencv java中乘以矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:24 28 4
gpt4 key购买 nike

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

OpenCV Error: Sizes of input arguments do not match (The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array') in cv::arithm_op, file ........\opencv\modules\core\src\arithm.cpp, line 1287 Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: ........\opencv\modules\core\src\arithm.cpp:1287: error: (-209) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 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);

最佳答案

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]

关于java - 无法在opencv java中乘以矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212167/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com