【代码】读取图像,计算面宽比,并保存至表格

简介: 【代码】读取图像,计算面宽比,并保存至表格

计算面宽比

此处计算(第一个点和第17个点之间的距离)/(第28个点和第52个点之间的距离)


import cv2
import dlib
import math
import numpy as np  # 导入numpy库



#读取图片
img = cv2.imread("C:/Users/Lenovo/Desktop/c.jpg")
print(img.shape)

#图像转化为灰度图

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#获得脸部位置检测器(加载人脸检测模块)
detector = dlib.get_frontal_face_detector()

#使用detector进行人脸检测 dets为返回的结果
faces = detector(gray_img, 1)

#用dlib库加载预测模型
predictor=dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

for k, d in enumerate(faces):
    shape = predictor(gray_img, d)

    # 计算第一个点和第17个点之间的距离
    point_1 = shape.part(0)   # 第一个特征点
    point_17 = shape.part(16) # 第17个特征点
    distance_1 = math.sqrt((point_1.x - point_17.x)**2 + (point_1.y - point_17.y)**2)

    # 计算第28个点和第52个点之间的距离
    point_28 = shape.part(27) # 第28个特征点
    point_52 = shape.part(51) # 第52个特征点
    distance_2 = math.sqrt((point_28.x - point_52.x)**2 + (point_28.y - point_52.y)**2)

    # 计算面部比例
    facial_ratio = distance_1 / distance_2

    print("面部比例是:", facial_ratio)

读取某一文件夹下的图片并计算面宽比,并保存至表格

将代码放到图片同级路径,注意更改图片路径和表格存放路径

imimport cv2
import dlib
import math
import numpy as np  # 导入numpy库

import os
from PIL import Image
import pandas as pd

folder_path = r"F:\face_code\pics"
filename_list = []
for filename in os.listdir(folder_path):
    filepath = os.path.join(folder_path, filename)

    # 检查文件类型是不是图片
    if os.path.isfile(filepath) and filepath.endswith(('.bmp','.jpg')):
        # 打开图片并处理
        with Image.open(filepath) as img:
            # TODO: 在这里进行你的图片处理操作
            # 示例代码:输出图片信息
            print(filename, "- Size:", img.size, "- Format:", img.format)
            filename_list.append(filename)
facial_ratio_list = []
for filename in filename_list:
    #读取图片
    print(filename)
    img = cv2.imread(filename)
    print(img.shape)

    #图像转化为灰度图

    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #获得脸部位置检测器(加载人脸检测模块)
    detector = dlib.get_frontal_face_detector()

    #使用detector进行人脸检测 dets为返回的结果
    faces = detector(gray_img, 1)

    #用dlib库加载预测模型
    predictor=dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

    for k, d in enumerate(faces):
        shape = predictor(gray_img, d)

        # 计算第一个点和第17个点之间的距离
        point_1 = shape.part(0)   # 第一个特征点
        point_17 = shape.part(16) # 第17个特征点
        distance_1 = math.sqrt((point_1.x - point_17.x)**2 + (point_1.y - point_17.y)**2)

        # 计算第28个点和第52个点之间的距离
        point_28 = shape.part(27) # 第28个特征点
        point_52 = shape.part(51) # 第52个特征点
        distance_2 = math.sqrt((point_28.x - point_52.x)**2 + (point_28.y - point_52.y)**2)

        # 计算面部比例
        facial_ratio = distance_1 / distance_2

        print("面部比例是:", facial_ratio)
        facial_ratio_list.append(facial_ratio)
print(filename_list)
print(facial_ratio_list)

# 创建数据
data = {
    '图片': filename_list,
    '面宽比': facial_ratio_list
}

# 将数据转换为DataFrame
df = pd.DataFrame(data)

# 将数据输出到Excel文件
filepath = 'F:/face_code/excel.xlsx'
df.to_excel(filepath, index=False)

安装dlib报错怎么办

pip install dlib==19.6.1
相关文章
|
2月前
|
前端开发 网络安全
layui如何实现添加数据时关闭页面层,并实时刷新表格数据?
layui如何实现添加数据时关闭页面层,并实时刷新表格数据?
自定义实体拖动过程中不实时显示
自定义实体拖动过程中不实时显示
|
2月前
|
测试技术
【sgUploadTileImage】自定义组件:浏览器端生成瓦片图,并转换为File文件序列上传瓦片图
【sgUploadTileImage】自定义组件:浏览器端生成瓦片图,并转换为File文件序列上传瓦片图
|
2月前
|
开发工具
如何访问当前固定格式页面的所有控件并进行修改
如何访问当前固定格式页面的所有控件并进行修改
24 0
PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
622 0
PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
|
2月前
|
容器
微搭低代码实现下拉框动态填充值
微搭低代码实现下拉框动态填充值
|
8月前
在TableViewer中如何给表格的单元格增加其他组件的编辑功能
在TableViewer中如何给表格的单元格增加其他组件的编辑功能
30 0
|
9月前
|
敏捷开发 前端开发 开发者
【RaETable】🚀🚀🚀告别Form,RaETable表格列宽度支持拖动调整了,附带原理说明
【RaETable】🚀🚀🚀告别Form,RaETable表格列宽度支持拖动调整了,附带原理说明
鼠标可控的表格滑动(左右)demo效果示例(整理)
鼠标可控的表格滑动(左右)demo效果示例(整理)
|
12月前
|
容器
Echarts实战案例代码(30):同一个id空间Tab按钮显示不同图表防止叠加的解决方案
Echarts实战案例代码(30):同一个id空间Tab按钮显示不同图表防止叠加的解决方案
74 0