根据矩形框的4个顶点坐标计算yolo的坐标.
// # 转换成yolo格式的数据集,
// # labelname 所属分类
// # imgwidth,imgheight 图像的宽和高
// # points (左上角的点, 右上角的点, 右下角的点, 左下角的点)
ConvertToYolo(labelname: string, imgwidth: number, imgheight: number, points: Array<Point>) {
let xmin = 10000000;
let xmax = 0;
let ymin = 10000000;
let ymax = 0;
points.forEach((pointx: Point) => {
console.log(pointx);
if (xmin > pointx.x) {
xmin = pointx.x;
}
if (xmax < pointx.x) {
xmax = pointx.x;
}
if (ymin > pointx.y) {
ymin = pointx.y;
}
if (ymax < pointx.y) {
ymax = pointx.y;
}
});
// console.log('ymax=>' + ymax);
// console.log('ymin=>' + ymin);
// console.log('xmax=>' + xmax);
// console.log('xmin=>' + xmin);
const dw = 1.0 / (imgwidth);// # 有的人运行这个脚本可能报错,说不能除以0什么的,你可以变成dw = 1./((size[0])+0.1)
const dh = 1.0 / (imgheight); // # 有的人运行这个脚本可能报错,说不能除以0什么的,你可以变成dh = 1./((size[0])+0.1)
// let centerPointX = (xmin + xmax) / 2.0 - 1;
// let centerPointY = (ymin + ymax) / 2.0 - 1;
let xcenter = xmin + (xmax - xmin + 1) / 2;
let ycenter = ymin + (ymax - ymin + 1) / 2;
// console.log('xcenter=>' + xcenter);
// console.log('ycenter=>' + ycenter);
let w = xmax - xmin;
let h = ymax - ymin;
xcenter = xcenter * dw;
w = w * dw;
ycenter = ycenter * dh;
h = h * dh;
// console.log('dw xcenter=>' + xcenter);
// console.log('dw ycenter=>' + ycenter);
// console.log('dw w=>' + w);
// console.log('dw h=>' + h);
return new Yolo(labelname, xcenter, ycenter, w, h);
}