javascript - 使用 opencv.js 获取轮廓点

标签 javascript opencv

我按照描述在 javascript 中使用 opencv.js here .我正在使用 findContour() 方法来获取计数器。我想在两个轮廓之间获得极左点和右点。有什么办法吗? 这是我的 js 代码:

    let contours = new cv.MatVector();
    let hierarchy = new cv.Mat();
    cv.findContours(image, contours, hierarchy, 1, 2);
      var cntareas=[];
    for (let i = 0; i < contours.size(); i++) {
       // storing the areas of countors
      cntareas.push(cv.contourArea(contours.get(i)));
     }
   //finding position of largest two areas.
  var twoLargetsValues = findTwoLargestPositions(cntareas);
   //contour with largest area
  var lcnt = contours.get(twoLargetsValues[0]); 
   //contour with second largest area
  var lcnt2 = contours.get(twoLargetsValues[1]);

现在如何使用 lctn 和 lctn2 找到极左和极右坐标。(意味着获取极左、极右、极点和极点)

最佳答案

我使用以下代码做到了这一点:

    var lcntPoint=[], lcnt2Point=[];
    for (let i = 0; i < lcnt.rows; i++) {

     lcntPoint.push({x:lcnt.data32S[i*2],y:lcnt.data32S[i*2+1]});   
    }
    for (let i = 0; i < lcnt2.rows; i++) {
    lcnt2Point.push({x:lcnt2.data32S[i*2],y:lcnt2.data32S[i*2+1]}); 
   }
   var a = findMinPointX(lcntPoint);
   var b = findMinPointX(lcnt2Point);
   var extLeft = (a.x < b.x) ? a.x : b.x;
   a = findMaxPointX(lcntPoint);
   b = findMaxPointX(lcnt2Point);
   var extRight = (a.x > b.x) ? a.x : b.x;

   a = findMinPointY(lcntPoint);
   b = findMinPointY(lcnt2Point);
   var extTop = (a.y < b.y) ? a.y : b.y;

   a = findMaxPointY(lcntPoint);
   b = findMaxPointY(lcnt2Point);
   var extBottom = (a.y > b.y) ? a.y : b.y;

   function findMinPointX(arr){
   var x=[];
   for(let i=0;i<arr.length;i++){
   x[i]=arr[i].x;
   }
   var MinPos=x.indexOf(Math.min(...x));
   return arr[MinPos];
   }
   function findMaxPointX(arr){
   var x=[];
   for(let i=0;i<arr.length;i++){

    x[i]=arr[i].x;
   }

   var MaxPos=x.indexOf(Math.max(...x));
   return arr[MaxPos];
   }
   function findMinPointY(arr){
   var x=[];
   for(let i=0;i<arr.length;i++){
    x[i]=arr[i].y;
   }
   var MinPos=x.indexOf(Math.min(...x));
   return arr[MinPos];
   }
   function findMaxPointY(arr){
   var y=[];
   for(let i=0;i<arr.length;i++){
    y[i]=arr[i].y;
   }
   var MaxPos=y.indexOf(Math.max(...y));
   return arr[MaxPos];
   }

关于javascript - 使用 opencv.js 获取轮廓点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024864/

相关文章:

javascript - Highcharts 中的动态数据

javascript - 使用 HTML 时如何允许国家标签自动隐藏?

javascript - 使用 javascript 和 jquery 更改 url

python - cv2.imshow和cv2.imwrite从同一来源产生不同的图像

macos - OSX lion 上 OpenCV 2.4 中经过训练的 LBP 级联错误

javascript - 我怎样才能在 select <option> 中的 json 数据中显示 "names"?

javascript - 用jQuery获取声卡的输入声音

c++ - OpenCv 3d拼接全景图

c++ - 我使用 cv::merge 时出错

image-processing - 使用CUDA反转图像时出现未知错误