是否有任何方法转换OpenCV.JavaScript中的Mat数组?



我正在OpenCV中工作。但是,我需要自己手动计算Mat。有没有一种方法可以像二维数组一样访问Mat ?

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

提前谢谢你

:问题是cv.matFromArray不能将2D数组转换为Mat。您必须将其用作1D数组。这就是为什么它永远不会返回正确的值。例如:

const myMat = cv.matFromArray(3, 3, cv.CV_64F, [1,2,3,4,5,6,7,8,9])
然后,你可以访问值
const value = myMat.doubleAt(1, 2) // row 1, col 2

您需要使用doubleAt(y,x)方法。

它是double因为垫子的内容是CV_64F,而不是因为你想要double。

您也可以使用.data64F来访问Mat的数据的扁平Float64Array

OpenCV.js是……。它起源于某人的谷歌代码之夏,从那以后就没有得到过重视。文档相当于一些教程;API文档似乎完全消失了。"Mat"接口很糟糕地模仿了c++中的at()方法,而不是查看numpy (python)或使此访问感觉"原生";javascript。重载[]操作符可以使用Proxy,但没有实现。

下面是一个例子:https://docs.opencv.org/4.x/de/d06/tutorial_js_basic_ops.html

请随意浏览OpenCV的问题,并可能提出一些改进建议。

最新更新