我发现使用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格式及其边界框格式
感谢您的任何建议
答案 0 :(得分:1)
给定x,y,width和height,得到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 :(得分:0)
我猜你的问题是参考系统。
在图像中,点(0,0)是左上角的像素。从您的ymin计算来看,您似乎正在考虑y"鞋面是更高的"但是,左上角的原点恰恰相反。
答案 2 :(得分:0)
只是
cv2.rectangle(img,(xmin,ymin),(xmax,ymax),(255,0,0),15)