由于不同的"step"导致的 OpenCV 错误

OpenCV error due possibly to different "step"

本文关键字:OpenCV 错误 step 于不同      更新时间:2023-10-16

我已经将一些代码从旧的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。

不过,我发现不同的是"步长">——一个是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);错误的罪魁祸首吗?

是否不可能在不同类型之间执行操作(如遮罩(?

感谢

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

您可能正在寻找矩阵乘法,它是通过*运算符实现的。因此

cv::Mat DDD = XXX * YYY;

将正确编译和运行。

对于记录,这与step字段无关(直接(,对于矩阵,它是列数乘以sizeof(double),因为矩阵的类型是CV_64FC1。如果矩阵不是连续的,事情会变得更复杂,但事实并非如此。