OpenCV边界框格式疑问及dlib检测框转换为OpenCV格式的相关问题
OpenCV与dlib边界框格式转换说明
你对左上角坐标的疑问本质来自常规笛卡尔坐标系和计算机视觉图像坐标系的差异:
- 常规数学场景下的笛卡尔坐标系原点位于平面左下角,y轴向上递增,该规则下左上角点确实对应
xmin、ymax - 包括OpenCV、dlib在内的绝大多数计算机视觉工具,采用的图像坐标系原点固定在图像左上角,x轴向右递增,y轴向下递增:y值越小对应图像中的位置越靠上,x值越小对应位置越靠左,因此
(xmin, ymin)自然对应边界框的左上角点。
dlib边界框转OpenCV格式方法
dlib的检测结果输出为dlib.rectangle对象时,自带四个属性读取边界极值:
rect.left():边界框最左侧x坐标,对应xminrect.top():边界框最上方y坐标,对应yminrect.right():边界框最右侧x坐标,对应xmaxrect.bottom():边界框最下方y坐标,对应ymax
转换为OpenCV要求的(x, y, w, h)格式可直接套用以下逻辑:
# 假设dlib检测输出结果为dlib_rect x = dlib_rect.left() y = dlib_rect.top() w = dlib_rect.right() - dlib_rect.left() h = dlib_rect.bottom() - dlib_rect.top() opencv_bbox = (x, y, w, h)
可调用OpenCV绘制接口验证转换结果:cv2.rectangle(原图, (x,y), (x+w, y+h), (0,255,0), 2)
绘制结果与dlib自带绘制工具的输出一致即代表转换正确。
内容的提问来源于stack exchange,提问作者Anubhav Guha
相关产品推荐
相关产品推荐

