2012-06-07 30 views
31

Tengo dos imágenes Mat en OpenCV:La multiplicación de matrices en OpenCV

Mat ft = Mat::zeros(src.rows,src.cols,CV_32FC1); 
Mat h = Mat::zeros(src.rows,src.cols,CV_32FC1); 

Ambas imágenes son de la misma dimensión y se calculan la imagen de una única fuente de.

me gustaría multiplicar estas dos imágenes, pero han intentado usar tanto

Mat multiply1 = h*ft; 

Mat multiply2; 
gemm(h,ft,1,NULL,0,multiply2); 

pero ambos resultado en el siguiente error de aserción:

OpenCV Error: Assertion failed (a_size.width == len) in unknown function, file ...matmul.cpp Termination called after throwing 'cv::exception'

¿Qué estoy haciendo mal?

+0

para ver lo que en realidad la excepción _says_, poner la línea de falla dentro de un bloque 'try' como:' try {[...]} catch (cv :: const Excepción & e) {std :: cerr << "Excepción de OpenCV:" << e.what() << std :: endl; } ' –

Respuesta

88

Usted dice que las matrices tienen las mismas dimensiones y, sin embargo, está intentando realizar la multiplicación de matrices en ellas. La multiplicación de matrices con la misma dimensión solo es posible si son cuadradas. En su caso, obtiene un error de aserción, porque las dimensiones no son cuadradas. Debes tener cuidado al multiplicar matrices, ya que hay dos posibles significados de multiplicar.

Matrix multiplication es donde se multiplican dos matrices directamente. Esta operación multiplica la matriz A del tamaño [a x b] con la matriz B del tamaño [b x c] para producir la matriz C de tamaño [a x c]. En OpenCV se consigue utilizando el sencillo * operador:

C = A * B 

Element-wise multiplication es donde cada píxel de la matriz de salida está formado por la multiplicación de ese pixel en la matriz A por su entrada correspondiente en la matriz B. Las matrices de entrada deben ser del mismo tamaño, y la salida será del mismo tamaño también. Esto se logra mediante la función mul():

output = A.mul(B); 
+0

Lo siento, pero no veo cómo responde esto a la pregunta. ¿Por qué debería fallar la aserción en la primera declaración "h * ft"? – Devesh

+3

Porque tal como está, h * ft está intentando realizar una multiplicación de matriz que, al darse cuenta de cómo se forman h y ft, requeriría src.rows == src.cols. – Chris

+0

Oh sí, por supuesto. Supuse que eran iguales. Mi error. – Devesh

Cuestiones relacionadas