我正在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的问题,并可能提出一些改进建议。