我按照描述在 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/