Multiplicación básica de matriz en OpenCV para Android

Probablemente estoy siendo increíblemente estúpido aquí, pero estoy teniendo problemas para hacer algunas basicaly Mat multiplicación con OpenCV para Android.

Tengo dos Mat's del mismo tipo, CV_64F

mat1 tiene tamaño: 3 filas, 3 cols
mat2 tiene tamaño: 3 filas, 1 cols

Quiero multiplicarlos para dar el producto mat3 de tamaño 3 filas, 1 cols.

He intentado usar:

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

Pero tengo un error:

CvException [org.opencv.core.CvException: /home/andreyk/OpenCV2/trunk/opencv_2.3.1.b2/modules/core/src/arithm.cpp: 1253: error: (-209) La operación no es 'array op Array '(donde las matrices tienen el mismo tamaño y el mismo número de canales), ni' array op scalar 'ni' scalar op array 'en la función void cv :: arithm_op (const cv :: _ InputArray y const cv :: _ InputArray & Const cv :: _ OutputArray &, const cv :: _ EntradasArray &, int, void (* ) (const uchar , size_t, const uchar *, size_t, uchar *, size_t, cv :: Size, void *), bool, void *

¿Qué estoy haciendo mal?

Gracias por cualquier ayuda por adelantado.

EDITAR:
Si ayuda, la mat2 matriz 3×3 es el resultado de Imgproc.getPerspectiveTransform y el resto del código es como sigue:

 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); 

Usted está básicamente tratando de realizar la siguiente operación ahora:

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

Aquí * es la multiplicación. Una multiplicación matricial no puede hacerse de esta manera. Lea las multiplicaciones matriciales aquí .

La operación que desea realizar es:

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

Para que el código funcione, realice los siguientes cambios:

 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 

EDITAR

Además, está utilizando el método Core.multiply . En la documentación de OpenCv se menciona: La función multiplica el producto por elemento de dos matrices. Si está buscando un producto de matriz, no un producto por elemento, consulte Core.gemm () .

La función gemm(src1, src2, alpha, src3, beta, dest, flags) realiza la multiplicación de acuerdo con la siguiente función:

 dest = alpha * src1 * src2 + beta * src3 

La multiplicación básica de la matriz (en su caso) se realiza mediante:

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

Invertir sus 2 matrices multiplicadas: Core.multiply (mat2, mat1, mat3);

  • Animar la imagen de la cara - usando deformación?
  • Cómo detectar los bordes largos de la pared para preparar la máscara y recolorar
  • OpenCV en Android Studio
  • Incluir OpenCV en el paquete de aplicaciones de Android
  • Cómo obtener GNU C en las preferencias
  • Calcular la relación de aspecto de la imagen de destino Transformar perspectiva
  • Mejorar el rendimiento de Tesseract con OpenCV en Android
  • Pasos de convertir el proyecto C ++ opencv en la computadora a opencv android
  • OpenCV para Android - Elementos de acceso de Mat
  • La importación de Opencv highgui en el androide estudio está mostrando error.Cannot resolver (he añadido la biblioteca sigue siendo el error permanecen)
  • Cómo cambiar el tamaño de una imagen a la imagen de alta resolución sin perder píxeles?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.