Я хочу извлечь сетку из изображения, чтобы иметь возможность измерять «вещи» на другом снимке, снятом с той же камеры.расстояние между квадратами составляет 1 метр. Я могу обнаружить линии (не идеально). Мне нужна помощь, чтобы получить более чистые линии, а также получить координаты точек пересечения в пикселях в виде массива.
здесь обработанное изображениеhttps://ibb.co/Hn6WYz5 и скриншот с результатом https://ibb.co/bgpmDpm
Вот мой код </p>
<pre><code> const cv2 = require('opencv4nodejs');
let image1 = cv2.imread('./mypicture.jpg')
let gray=image1.bgrToGray()
let dst = gray.canny(500, 800,3)
let lines= dst.houghLines(2, Math.PI/180.0, 150);
let points = [];
let isLine=(pt1,pt2,maxX=2851,maxY=10)=>{
return Math.abs(pt1.x - pt2.x )<maxX || Math.abs(pt1.y - pt2.y )<maxY
};
let pointContain=(pt,maxX=2851,maxY=10)=>{
return points.some((point)=>{
return Math.abs(point.x-pt.x)<maxX && Math.abs(point.y-pt.y)<maxY
});
};
for(let i in lines) {
let rho = lines[i].x;
let theta = lines[i].y;
let a = Math.cos(theta)
let b = Math.sin(theta)
let x0=a * rho;
let y0 = b * rho;
let max=1600;
let x1=parseInt(x0 + max * (-b));
let y1=parseInt(y0 + max * (a));
let pt1 = new cv2.Point2(x1, y1)
let pt2 = new cv2.Point2(parseInt(x0 - max * (-b)), parseInt(y0 - max * (a)))
if(isLine(pt1,pt2) && !pointContain(pt1) && !pointContain(pt2)){//hack to clean lines
points.push(pt1)
points.push(pt2)
console.log(pt1,pt2)
image1.drawLine(pt1, pt2, new cv2.Vec3(0, 0, 255), 2)
}
}
cv2.imshow('image1',image1)
cv2.waitKey(0)