我想用opencv c++创建图像标记程序来标记yolo对象检测器的图像,但是我正在努力将矩形坐标(x1,y1,x2,y2)转换为yolo格式,即“对象类x_center y_center width height” 。并且根据文档x_center和y_center是矩形的中心(不是左上角)。
我在已标记的图像上尝试了此代码

            double centerX = (x1 + x2) / (2.0 * imageWidth);
            double centerY = (y1 + y2) / (2.0 * imageHeight);
            double width = double(abs(x2 - x1) / imageWidth);
            double height = double(abs(y2- y1) / imageHeight);
并得到0 0.396759 0.278906 0.0109375 0.326852这与0 0.40703125 0.5194444444444445 0.25364583333333335 0.5851851851851851
我怎样才能使它正常工作?

最佳答案

我终于找到了有效的代码:

Point centralPoint = Point((selectedRect.tl().x + selectedRect.br().x) / 2, (selectedRect.tl().y + selectedRect.br().y) / 2);
                centerX = centralPoint.x / imageWidth;
                centerY = centralPoint.y / imageHeight;

                rectWidth = abs(selectedRect.br().x - selectedRect.tl().x) / imageWidth;
                rectHeight = abs(selectedRect.br().y - selectedRect.tl().y) / imageHeight;

关于c++ - 将opencv矩形坐标转换为yolo对象坐标以进行图像标记,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63301449/

10-09 03:21