c++ - OpenCV 错误可能是由于不同的 "step"

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

在网络上,这个错误似乎与 channel 数量不同有关——我的都是 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。如果矩阵不连续,事情会变得更加复杂,但对您来说情况并非如此。

关于c++ - OpenCV 错误可能是由于不同的 "step",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16929952/

相关文章:

java - 从终端使用 OpenCV 运行 java 时发生 JNI 错误

android - 如何为 Android 使用重新编译的 OpenCV 构建

c# - 包装 OpenCV C++ 以便与 C# 一起使用

c++ - GCC 不能使用未定义的运算符=

c++ - C++中的简单继承

c++ - 通过指针访问 std::vector 元素与 end()

c++ - 如何改进视频流中的形状检测

c++ - 如何在opencv中使用图像的幅度和相位进行逆DFT?

c++ - 通过另一个类中的指针访问多维数组的元素

c++ - 派生类在 C++ 中携带不同数据类型的最佳方式