python椭圆拟合_Dlib Opencv cv2.fitEllipse用于人眼轮廓椭圆拟合

本文介绍如何使用dlib库检测人脸特征点,并利用OpenCV的cv2.fitEllipse方法来拟合眼睛区域的椭圆。通过读取图片文件,定位面部特征点,特别是左右眼的位置,然后基于这些点拟合椭圆并绘制到原始图像上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dlib库的安装以及人脸特征点的识别分布分别在前两篇博文里面

Dlib Python 检测人脸特征点 Face Landmark Detection

Mac OSX下安装dlib (Python)

这篇主要涉及 cv2.ellipse 和 cv2.fitEllipse 的用法

import cv2

import dlib

import numpy as np

detector = dlib.get_frontal_face_detector()

landmark_predictor = dlib.shape_predictor('/Users/apple/Downloads/shape_predictor_68_face_landmarks.dat')

img = cv2.imread('/Users/apple/Downloads/3-1.jpg')

faces = detector(img,1)

left_eye = []

right_eye = []

if ( len(faces) > 0):

for k,d in enumerate(faces):

shape = landmark_predictor(img,d)

for i in range(36,42):

right_eye.append([shape.part(i).x,shape.part(i).y])

for i in range(42,48):

left_eye.append([shape.part(i).x,shape.part(i).y])

ellipse_left = cv2.fitEllipse(np.array(left_eye))

ellipse_right = cv2.fitEllipse(np.array(right_eye))

cv2.ellipse(img, ellipse_left, (0,255,0), 1)

cv2.ellipse(img, ellipse_right, (0,255,0), 1)

cv2.fitEllipse(points)

里面的points类型要求是numpy.array([[x,y],[x1,y1]...]) 并不是把所有点都包括在椭圆里面,而是拟合出一个椭圆尽量使得点都在圆上

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])

其中每个参数的意义如下:

· img 图像

· center 中心坐标

· axes 椭圆的尺寸(长短轴)

· angle 旋转角度

· startAngle 起始角度

· endAngle 终止角度

· 后面参数都是跟线条有关的

ellipse_left

((275.1310119628906, 197.24081420898438),

(13.491097450256348, 47.203433990478516),

84.19256591796875)

这个时候返回的分别是椭圆的中心坐标,短轴长轴(也就是2b,2a),旋转角度.

center = ellipse_left[0]

size = ellipse_left[1]

angle = ellispe_left[2]

cv2.imshow('PIC',img)

cv2.waitKey(0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值