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
- JNI- java.lang.UnsatisfiedLinkError: Método nativo no encontrado
- OpenCV con Android NDK Referencias indefinidas
- Cómo calcular la diferencia entre 2 fotogramas entrantes de la cámara (CV abierto)
- Convertir el marco de vista previa de Android a OpenCV Mat
- OpenCV warpPerspective rendimiento lento
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);
- Detección de logo de OpenCV - ¿Qué usar?
- Cómo ejecutar openCV relacionados con la aplicación, sin utilizar OpenCV manager en android
- Cómo averiguar la cara detectada es real o falsa
- Detección de movimiento con OpenCV
- Aplicación de Android que utiliza tecnología de reconocimiento de imagen
- Error: 'to_string' no es un miembro de 'std'
- Android NDK. Ninguna sección de C / C ++ en las propiedades del proyecto de Eclipse
- OpenCV en Android - Encabezados; No hay tal directorio de archivos
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);