如何使用opencv通过xmax xmin ymax ymin写矩形(边界框)

问题描述 投票:-1回答:3

我发现我可以使用opencv轻松地使用4个点(x,y,w,h)来编写边界框。其中x,y是左上角,w =宽度,h =高度。

cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),15)

但是如何使用仅具有xmax xmin ymax ymin点的opencv来编写边界框?我需要检查我的代码中的所有内容是否正常,x,y,w,h使用的边界框完全等于xmax xmin ymax ymin下的边界框。

我使用这些代码将x,y,w,h转换为xmax xmin ymax ymin

bbox_topleft_corner_x = int(prod_data[0])
bbox_topleft_corner_y = int(prod_data[1])
bbox_w = int(prod_data[2])
bbox_h = int(prod_data[3])

ymax = bbox_topleft_corner_y
ymin = bbox_topleft_corner_y - bbox_h
xmax = bbox_topleft_corner_x + bbox_w
xmin = ymin + bbox_w

但我不确定我是否按照自己的意愿行事。我想将x,y,w,h转换为VOOC2007注释xml格式及其边界框格式

谢谢你的建议

python-3.x opencv opencv3.0 object-detection bounding-box
3个回答
1
投票

给定x,y,宽度和高度,获得x_max和y_max应该是微不足道的。

x_max = x + width
y_max = y + height

重要的是要记住图像的坐标系在左上角是(0, 0),右下角是(image_width, image_height)。因此:

top_left = (x, y)
bottom_right = (x+w, y+h)

最后要记住的是,有些情况下请求的参数是点(x, y),例如cv2.rectangle函数中的情况。但是,像素作为底层的ndarray结构image[row, column]被访问

有关opencv坐标系的更多信息,请查看this question


1
投票

这很简单

cv2.rectangle(img,(xmin,ymin),(xmax,ymax),(255,0,0),15)

0
投票

我想你的问题是参考系统。

在图像中,点(0,0)是左上角的像素。从你的ymin计算来看,似乎你在考虑y“上面是更高的”但是左上角的起点恰恰相反。

© www.soinside.com 2019 - 2024. All rights reserved.