基于OpenCV for Android的matrix乘法

我可能在这里是非常愚蠢的,但是我在使用OpenCV for Android做一些基本的Mat乘法时遇到了麻烦。

我有两个相同types的Mat, CV_64F

mat1尺寸:3行,3列
mat2尺寸:3行,1列

我想乘以他们给大小3行1列的产品mat3

我试过使用:

 Mat mat3 = new Mat(3, 1, CvType.CV_64F); Core.multiply(mat1, mat2, mat3); 

但是我得到一个错误:

CvException [org.opencv.core.CvException:/home/andreyk/OpenCV2/trunk/opencv_2.3.1.b2/modules/core/src/arithm.cpp:1253:error:(-209)该操作既不是'array op (const cv :: _ InputArray&,const cv :: _ InputArray&,array''(其中数组的大小和通道数相同),也不是'数组运算标量',也不是'标量运算数组' const cv :: _ OutputArray&,const cv :: _ InputArray&,int,void(* )(const uchar ,size_t,const uchar *,size_t,uchar *,size_t,cv :: Size,void *),bool,void *)

我究竟做错了什么?

提前感谢您的帮助。

编辑:
如果有帮助,3×3matrixmat2Imgproc.getPerspectiveTransform的结果,其余的代码如下:

 Mat mat1 = new Mat(3, 1, CvType.CV_64F); mat1.put(0, 0, 2.0); mat1.put(1, 0, 0.5); mat1.put(2, 0, 1.0); Mat mat3 = new Mat(3, 1, CvType.CV_64F); Core.multiply(mat2, mat1, mat3); 

  • android - 使用没有surfaceview或textureview的相机
  • 在两幅图像之间绘制图像 - 图像识别
  • 无法在android中实现描述符
  • 在OpenCV中将Mat对象从本机代码返回到java
  • 在Android中使用OpenCV加载图像
  • 无法在OpenCV Android示例中链接本机库
  • OpenCV服务意图必须明确,Android 5.0棒棒糖
  • 在Android上的OpenCV中旋转video捕捉
  • 您现在基本上尝试执行以下操作:

     [ 0 ] [ 0 1 2 ] [ 1 ] * [ 3 4 5 ] [ 2 ] [ 6 7 8 ] 

    在这里*是乘法。 matrix乘法不能这样做。 在这里阅读matrix乘法。

    你想要执行的操作是:

      [ 0 1 2 ] [ 0 1 2 ] * [ 3 4 5 ] [ 6 7 8 ] 

    要使您的代码工作,请进行以下更改:

     Mat mat1 = new Mat(1, 3, CvType.CV_64F); // A matrix with 1 row and 3 columns mat1.put(0, 0, 2.0); // Set row 1 , column 1 mat1.put(0, 1, 0.5); // Set row 1 , column 2 mat1.put(0, 2, 1.0); // Set row 1 , column 3 

    编辑

    另外,您正在使用Core.multiply方法。 在OpenCv的文档中提到:函数乘法计算两个matrix的每个元素的乘积。 如果您正在寻找一个matrix产品,而不是每个元素的产品,请参阅Core.gemm() 。

    函数gemm(src1, src2, alpha, src3, beta, dest, flags)根据以下函数执行乘法运算:

     dest = alpha * src1 * src2 + beta * src3 

    基本matrix乘法(在你的情况下)是通过:

     Core.gemm(mat2, mat1, 1, NULL, 0, mat3, 0); 

    颠倒你的2个相乘的matrix:Core.multiply(mat2,mat1,mat3);