Estoy trabajando en Mat en OpenCV. Sin embargo, necesito calcular manualmente el Mat por mí mismo. ¿Hay alguna forma de acceder a la matriz 2D de Mat likes?
const myMat = cv.matFromArray(cv, 3, 3, cv.CV_64F, [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ]) const newMat = someProcessThatReturnMat(myMat) /* OpenCV in JS cannot access Mat like this */ const result = someProcess(newMat[1][2], newMat[2][0])Gracias de antemano
Actualizado : el problema es que cv.matFromArray no puede convertir una matriz 2D a Mat. Tienes que usarlo como matriz 1D. Es por eso que nunca devuelve los valores correctos. Por ejemplo:
const myMat = cv.matFromArray(3, 3, cv.CV_64F, [1,2,3,4,5,6,7,8,9])Y luego, puede acceder al valor
const value = myMat.doubleAt(1, 2) // row 1, col 2Debe utilizar el doubleAt(y,x) .
Es doble porque el contenido del tapete es CV_64F , no porque quieras dobles.
También puede usar .data64F para acceder a un Float64Array plano de los datos del Mat.
OpenCV.js es... tosco . Se originó a partir del Google Summer of Code de alguien y no ha recibido mucha atención desde entonces. La documentación asciende a algunos tutoriales; Los documentos de la API parecen faltar por completo. La interfaz "Mat" emuló mal el método at() de C++, en lugar de buscar numpy (python) o hacer que este acceso se sintiera "nativo" de javascript. Es posible sobrecargar el operador [] usando un Proxy , pero eso no se implementó.
Aquí hay un ejemplo: https://docs.opencv.org/4.x/de/d06/tutorial_js_basic_ops.html
Siéntase libre de navegar por los problemas de OpenCV y tal vez sugerir algunas mejoras.