2013-06-05 26 views
2

我已经将一些代码从旧的Opencv转换为C++版本,并且在矩阵乘法中出现错误。可能由于不同的“步骤”导致的OpenCV错误

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') 

在网络上,这个错误似乎与具有不同数量的通道相关联 - 雷都1.

我确实发现不同的虽然是一个“台阶” - 一个它是24,另一个是32.

这一步是哪里?

我创建使用

cv::Mat YYY(3, 4, CV_64FC1); // step 32 
cv::Mat XXX(3, 3, CV_64FC1); // step 24 

然而,他们似乎有不同的步骤都输入矩阵?

难道这是造成cv::multiply(XXX,YYY, DDD);错误的罪魁祸首吗?

不可能在不同类型之间执行操作(如掩码)吗?

谢谢

+0

你能发布给你错误的代码吗?这通常比试图用文字解释更清楚。 – Aurelius

+0

我刚刚编辑 - 我得到错误的cv :: multiply – Thalia

回答

2

cv::multiply()执行逐元素乘法两个矩阵。如错误所述,您的矩阵大小不一样。

您可能正在寻找矩阵乘法,这是通过运算符*完成的。因此,

cv::Mat DDD = XXX * YYY; 

将编译并正确运行。

根据记录,这有什么好(直接)做的step场,这对于你的矩阵是列次数sizeof(double),因为你的矩阵是CV_64FC1类型。如果矩阵不连续,事情会变得更加复杂,但事实并非如此。

+0

谢谢你,它工作得很好 - 我认为cvMultiply将被替换为cv :: multiply ...似乎C++版本是如此聪明;-) – Thalia

+1

我很高兴我能帮上忙!如果你还没有找到它,[documentation](http://docs.opencv.org/index.html)是阅读C++ API的好地方。有时,快速查找行为不当的功能可以准确地获得您所需的信息! – Aurelius

相关问题