欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenCV Python 椭圆 和 FDDB 数据库

程序员文章站 2024-03-14 21:22:05
...

在人脸检测算法中,FDDB人脸数据集的人脸标注是椭圆形的框。

FDDB: Face Detection Data Set and Benchmark

数据格式如下:

major_axis_radius minor_axis_radius angle center_x center_y 1
长轴,短轴,角度,椭圆中心X,椭圆中心Y,类别1

2002/08/15/big/img_346
2
57.900200 36.595000 -1.522423 167.614400 65.427201  1
58.832400 43.598899 1.552231 304.969700 89.517800  1

图像

OpenCV Python 椭圆 和 FDDB 数据库

使用OpenCV将椭圆框的人脸标记到图像中,注意:椭圆函数是ellipse()的轴参数,是先短轴后长轴,与FDDB数据集正好相反。

import cv2

img = cv2.imread('./data/img_346.jpg')  # 读取图像

cv2.ellipse(img, center=(167, 65), axes=(36, 58),
            angle=-1.522423, startAngle=0, endAngle=360,
            color=255)

cv2.ellipse(img, center=(304, 89), axes=(43, 58),
            angle=1.552231, startAngle=0, endAngle=360,
            color=255)

cv2.imshow('Image', img)
cv2.imwrite('./data/img_346.bbox.jpg', img)
cv2.waitKey(0)

OpenCV Python 椭圆 和 FDDB 数据库

将椭圆框转换为矩形框,中心加减长短轴,就是矩形框的两个对角点:

import cv2

img = cv2.imread('./data/img_346.jpg')

cv2.ellipse(img, center=(167, 65), axes=(36, 58),
            angle=-1.522423, startAngle=0, endAngle=360,
            color=255)

cv2.ellipse(img, center=(304, 89), axes=(43, 58),
            angle=1.552231, startAngle=0, endAngle=360,
            color=255)

i1_pt1 = (167 - 36, 65 - 58)
i1_pt2 = (167 + 36, 65 + 58)
cv2.rectangle(img, pt1=i1_pt1, pt2=i1_pt2, color=(255, 0, 255))

i2_pt1 = (304 - 43, 89 - 58)
i2_pt2 = (304 + 43, 89 + 58)
cv2.rectangle(img, pt1=i2_pt1, pt2=i2_pt2, color=(255, 0, 255))

cv2.imshow('Image', img)
cv2.imwrite('./data/img_346.bbox.jpg', img)
cv2.waitKey(0)

OpenCV Python 椭圆 和 FDDB 数据库

OK, that’s all! Enjoy it!