【问题标题】:Error: (-13:Image step is wrong) Step must be a multiple of esz1 in function 'cv::Mat::Mat'错误:(-13:图像步骤错误)步骤必须是函数 'cv::Mat::Mat' 中 esz1 的倍数
【发布时间】:2020-07-10 08:45:39
【问题描述】:

我目前正在编写一段代码,该代码应该对两个矩阵 [3x4]*[4x1] 进行矩阵乘法以获得 [3x1] 矩阵。为此,我使用的是 Java 和 OpenCV,因为我在图像处理领域工作。

这是我使用的一段简化代码:

Mat projectionMat = new Mat(3,4,CvType.CV_32FC1);
Mat pointI = new Mat(1,4,CvType.CV_32FC1);
Mat transPointI = new Mat(4,1,CvType.CV_32FC1);
Core.transpose(pointI, transPointI);
Mat sUV = new Mat(3,1,CvType.CV_32FC1);

我不会告诉你我是如何填充矩阵的,但是当我在填充之后转储(打印)它们时,这是我在终端上获得的: projectionMatrixtransPointI

所以我确实有我的 [3x4] 和 [4x1] 矩阵,下一步是我尝试使用 openCv Core.gemm 函数实现的矩阵乘法,如下所示 - SUV 矩阵是目标矩阵 - :

Core.gemm(projectionMat, transPointI, 1, new Mat(), 0, sUV);

据我了解,一切都应该在这里工作,但是当我执行代码时,eclipse 会抛出一个指向 Core.gemm 行的错误:

Caused by: CvException [org.opencv.core.CvException: cv::Exception: OpenCV(3.4.10) C:\build\3_4_winpack-bindings-win64-vc14-static\opencv\modules\core\include\opencv2/core/mat.inl.hpp:607:
error: (-13:Image step is wrong) Step must be a multiple of esz1 in function 'cv::Mat::Mat']
at org.opencv.core.Core.gemm_1(Native Method)
at org.opencv.core.Core.gemm(Core.java:3702)

我环顾四周,似乎找不到遇到同样问题的人。即使发生图像步骤错误,它们通常也不是由 Core.gemm 函数引起的。无论如何,我有点迷路了,所以任何解决方案/解决方案的提示都会受到欢迎,谢谢! :)

【问题讨论】:

    标签: java opencv matrix matrix-multiplication mat


    【解决方案1】:

    好吧,我找到了问题的答案!这实际上是类型冲突的问题,我所有的矩阵都被实例化为包含浮点数,这在最后一次乘法之前是可以的,因为它会导致双精度数。所以我只需要改变我的矩阵来包含双打。为此,我改变的是:

    Mat projectionMat = new Mat(3,4,CvType.CV_64F);
    Mat pointI = new Mat(1,4,CvType.CV_64F);
    Mat transPointI = new Mat(4,1,CvType.CV_64F);
    Core.transpose(pointI, transPointI);
    Mat sUV = new Mat(3,1,CvType.CV_64F);
    

    之后乘法执行成功!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2020-09-05
      • 2018-08-01
      • 1970-01-01
      • 2012-05-28
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多