vectores una matriz elementos crear con como columnas columna añadir array agregar opencv matrix copy repeat

elementos - Opencv: ¿cómo crear una nueva matriz a partir de la matriz existente con algunos cambios?



crear matriz con numpy (2)

en OpenCV, tengo una matriz como esta: [3 4 2; 5 2 1; 6 7 9], eso es con un tamaño de 3x3. Ahora quiero cambiarlo a un tamaño 3x1, y ser así: [3 4 2 5 2 1 6 7 9]. Pero esto no es exactamente lo que quiero, mi objetivo real es poner cero antes y después de cada valor, al mismo tiempo, repetir cada valor tres veces. Entonces mi matriz de objetivos debería ser así: [0 3 3 3 0 0 4 4 4 0 0 2 2 2 0 0 5 5 5 0 0 2 2 2 0 0 1 1 1 0 0 6 6 6 0 0 7 7 7 0 0 9 9 9 0]. Escribí el siguiente código para esto:

for ( int i = 0; i < 3; i ++ ) { for ( int j = 0; j < 3; j ++ ) { for ( int m = k + 1; m < m + 3; m ++ ) { dstMat.col (m) = srcMat.at <int> ( i, j ); } k = k + 5 ; } }

¿Hay alguna forma mejor de hacerlo? Especialmente sin bucle "for", es realmente confuso en el tiempo. Muchas gracias de antemano.


Puede comenzar por llamar a remodelar en su matriz para aplanarlo en una fila / columna. Eso le ahorraría uno de los bucles for y lo aclararía ligeramente.


Puede usar Mat :: reshape para convertir su matriz de 3x3 en 3x1. De esta forma, necesitará uno para el bucle en lugar de dos, y es una operación O(1) .

puede omitir el siguiente ciclo for usando ROI:

srcMat.reshape(0,1); for (int i =0; i < 9; i++) dstMat(cv::Range::all(), cv::Range(i*5+1, i*5+4)).setTo(srcMat.at<int>(i));

y eso sería todo.