OpenCV错误可能导致不同的“步骤”

时间:2013-06-05 01:06:03

标签: c++ opencv

我已将旧的Opencv中的一些代码转换为c ++版本,并且在矩阵乘法时出现错误。

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。

我发现的不同之处是“step” - 一个是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);中错误的罪魁祸首吗?

是否无法在不同类型之间执行操作(如掩码)?

谢谢

1 个答案:

答案 0 :(得分:2)

cv::multiply()执行元素方式两个矩阵的乘法运算。正如错误所述,您的矩阵大小不同。

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

cv::Mat DDD = XXX * YYY;

将编译并正确运行。

对于记录,这与({1}}字段没有任何关系(直接),对于您的矩阵而言,该字段的列数为step,因为您的矩阵的类型为sizeof(double) }。如果矩阵不连续,情况就会变得更复杂,但事实并非如此。