Javascript 如何在OpenCV.js中获取轮廓角点的坐标?

Javascript 如何在OpenCV.js中获取轮廓角点的坐标?,javascript,opencv,contour,Javascript,Opencv,Contour,我将OpenCV.js与JavaScript一起使用,并试图获得approxPolyDP返回的点。这是我的密码: let src = cv.imread(imgElement); let contours = new cv.MatVector(); let hierarchy = new cv.Mat(); let poly = new cv.MatVector(); cv.findContours(src, contours, hierarchy, cv.RETR_EXTERNAL, cv.

我将OpenCV.js与JavaScript一起使用,并试图获得approxPolyDP返回的点。这是我的密码:

let src = cv.imread(imgElement);
let contours = new cv.MatVector();
let hierarchy = new cv.Mat();
let poly = new cv.MatVector();

cv.findContours(src, contours, hierarchy, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE);

let cnt = contours.get(0);

cv.approxPolyDP(cnt, poly, 0.02 * peri, true);
这与drawContours功能完美结合。但是我想得到角点的坐标。在Python上获得它很简单,但在JavaScript上不容易

如何获取角点的坐标?

使用属性直接访问

函数onopenvready{ cv['onRuntimeInitialized']=async=>{ 等待加载图像 const mat=cv.imreaddocument.querySelector'imageSrc' const canvasOutput=document.querySelector'canvasOutput' canvasOutput.width=mat.size.width canvasOutput.height=mat.size.height cv.CVT颜色垫,垫,cv.COLOR_rgb2灰色,0 var等高线=新cv.MatVector 常量层次=新cv.Mat cv.findContoursmat、轮廓、层次、cv.RETR\u外部、cv.CHAIN\u近似\u简单 常量点={} 对于let i=0;i{ ctx.beginPath;ctx.moveTox,y; forlet i=0;i{ ctx.beginPath ctx.moveTops[0].x,ps[1].y ctx.arcps[0].x,ps[1].y,2,0,2*Math.PI ps.slice1.forEach{x,y}=>{ ctx.lineTox,y ctx.arcx,y,2,0,2*Math.PI } ctx.closePath 冲程 } } 通过使用属性直接访问

函数onopenvready{ cv['onRuntimeInitialized']=async=>{ 等待加载图像 const mat=cv.imreaddocument.querySelector'imageSrc' const canvasOutput=document.querySelector'canvasOutput' canvasOutput.width=mat.size.width canvasOutput.height=mat.size.height cv.CVT颜色垫,垫,cv.COLOR_rgb2灰色,0 var等高线=新cv.MatVector 常量层次=新cv.Mat cv.findContoursmat、轮廓、层次、cv.RETR\u外部、cv.CHAIN\u近似\u简单 常量点={} 对于let i=0;i{ ctx.beginPath;ctx.moveTox,y; forlet i=0;i{ ctx.beginPath ctx.moveTops[0].x,ps[1].y ctx.arcps[0].x,ps[1].y,2,0,2*Math.PI ps.slice1.forEach{x,y}=>{ ctx.lineTox,y ctx.arcx,y,2,0,2*Math.PI } ctx.closePath 冲程 } }
在这一点上,我找到了这个解决方案:

在这一点上,我找到了这个解决方案:

我怀疑您没有尝试我的代码,而是尝试插入/融化您和我的代码。如果您阅读我的代码,甚至repo的自述,您会发现您需要一个轮廓对象,而不是cv::MatVector,因为它不会提供相同的方法。如果您确实需要cv.RETR_EXTERNAL,您应该阅读src::Matrix.cc::FindContours,它分别接受mode和chain参数。我在浏览器上使用OpenCV,而不是在Node@sundowatch不知道浏览器中存在opencv.js。我已相应地更新了答案。它确实需要比基于节点的代码更大的难度。我怀疑您没有尝试我的代码,而是尝试插入/融化您和我的代码。如果您阅读我的代码,甚至repo的自述,您会发现您需要一个轮廓对象,而不是cv::MatVector,因为它不会提供相同的方法。如果您确实需要cv.RETR_EXTERNAL,您应该阅读src::Matrix.cc::FindContours,它分别接受mode和chain参数。我在浏览器上使用OpenCV,而不是在Node@sundowatch不知道浏览器中存在opencv.js。我已经更新了answ 呃相应的。它确实需要比基于节点的更大的难度。。