delaunay和voronoi图 人脸三角剖分

这篇具有很好参考价值的文章主要介绍了delaunay和voronoi图 人脸三角剖分。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先获取人脸68个特征点坐标,其中使用了官方的预训练模型shape_predictor_68_face_landmarks.dat:

import dlib
import cv2

predictor_path = "shape_predictor_68_face_landmarks.dat"
png_path = "face.jpg"

txt_path = "points.txt"
f = open(txt_path, 'w+')

# 与人脸检测相同,使用dlib自带的frontal_face_detector作为人脸检测器
detector = dlib.get_frontal_face_detector()
# 相撞
# 使用官方提供的模型构建特征提取器
predicator = dlib.shape_predictor(predictor_path)
win = dlib.image_window()
img1 = cv2.imread(png_path)

dets = detector(img1, 1)
print("Number of faces detected : {}".format(len(dets)))
for k, d in enumerate(dets):
    print("Detection {}  left:{}  Top: {} Right {}  Bottom {}".format(
        k, d.left(), d.top(), d.right(), d.bottom()
    ))
    lanmarks = [[p.x, p.y] for p in predicator(img1, d).parts()]
    for idx, point in enumerate(lanmarks):
        f.write(str(point[0]))
        f.write("\t")
        f.write(str(point[1]))
        f.write('\n')

实现人脸三角剖分:文章来源地址https://www.toymoban.com/news/detail-743057.html

# 日期:  2023/11/2 23:04
import cv2
import numpy as np
import random


# 检查点是否在矩形框内
def rect_contains(rect, point):
    if point[0] < rect[0]:
        return False
    elif point[1] < rect[1]:
        return False
    elif point[0] > rect[2]:
        return False
    elif point[1] > rect[3]:
        return False
    return True


# 画点
def draw_point(img, p, color):
    cv2.circle(img, p, 2, color)


# 绘制德劳内三角形
def draw_delaunay(img, subdiv, delaunay_color):
    trangleList = subdiv.getTriangleList()  # 获取Delaunay三角形的列表
    size = img.shape
    r = (0, 0, size[1], size[0])
    for t in trangleList:
        pt1 = (int(t[0]), int(t[1]))
        pt2 = (int(t[2]), int(t[3]))
        pt3 = (int(t[4]), int(t[5]))
        if rect_contains(r, pt1) and rect_contains(r, pt2) and rect_contains(r, pt3):
            cv2.line(img, pt1, pt2, delaunay_color, 1)  # 源图像,线段的两个端点,颜色,线宽
            cv2.line(img, pt2, pt3, delaunay_color, 1)
            cv2.line(img, pt3, pt1, delaunay_color, 1)


# Draw voronoi diagram
def draw_voronoi(img: object, subdiv: object) -> object:
    (facets, centers) = subdiv.getVoronoiFacetList([])  # 获取Voronoi构面的列表

    # 对于每个voronoi多边形
    for i in range(0, len(facets)):
        ifacet_arr = []
        # 得到每个多边形的顶点
        for f in facets[i]:
            ifacet_arr.append(f)

        ifacet = np.array(ifacet_arr, dtype=np.int32)
        # 随机颜色
        color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
        # 填充颜色
        cv2.fillConvexPoly(img, ifacet, color)  # 图像、多边形顶点、颜色
        vertex = np.array([ifacet])
        cv2.polylines(img, vertex, True, (0, 0, 0), 1)     # 绘制多边形,参数包括图像、多边形的点、线条是否闭合、颜色和线条宽度
        cv2.circle(img, (centers[i][0], centers[i][1]), 3, (0, 0, 0))   # 绘制圆,参数包括图像、中心点、半径、颜色


if __name__ == '__main__':
    # 定义窗口名称
    win_delaunary = "Delaunay Triangulation"
    win_voronoi = "Voronoi Diagram"

    # 在画三角形的时候开启动画
    animate = True

    # 定义画的颜色
    delaunary_color = (255, 255, 255)
    points_color = (0, 0, 255)

    # 读入图片
    img_path = "face.jpg"

    img = cv2.imread(img_path)

    # 复制
    img_orig = img.copy()

    # 矩形框用于Subdiv2D
    size = img.shape    # h, w, channel
    # x,y,w,h
    rect = (0, 0, size[1], size[0])

    # 创建一个Subdiv2D的实例
    subdiv = cv2.Subdiv2D(rect)

    # 创建点的列表
    points = []
    # 从文档中读取点的坐标
    with open("points.txt") as file:
        for line in file:
            x, y = line.split()
            points.append((int(x), int(y)))
    # 向subdiv中插入点
    for p in points:
        subdiv.insert(p)
        # 展示动画效果
        if animate:
            img_copy = img_orig.copy()
            # 绘制德劳内三角形
            draw_delaunay(img_copy, subdiv, (255, 255, 255))
            cv2.imshow(win_delaunary, img_copy)
            cv2.waitKey(100)

    # 绘制德劳内三角形
    draw_delaunay(img, subdiv, (255, 255, 255))

    # 绘制点
    for p in points:
        draw_point(img, p, (0, 0, 255))

    # 为沃罗诺伊图分配空间
    img_voronoi = np.zeros(img.shape, dtype=img.dtype)

    # 绘制沃罗诺伊图
    draw_voronoi(img_voronoi, subdiv)

    # 展示结果
    cv2.imshow(win_delaunary, img)
    cv2.imshow(win_voronoi, img_voronoi)
    cv2.waitKey(0)

到了这里,关于delaunay和voronoi图 人脸三角剖分的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 人工智能-OpenCV+Python实现人脸识别(人脸检测)

    在OpenCV中使用Haar特征检测人脸,那么需要使用OpenCV提供的xml文件(级联表)在haarcascades目录下。这张级联表有一个训练好的AdaBoost训练集。首先要采用样本的Haar特征训练分类器,从而得到一个级联的AdaBoost分类器。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征

    2024年02月06日
    浏览(98)
  • 人工智能大作业——人脸识别系统(最终)

    写在前面 时间过得飞快,时间已经距离我发第一篇文章过去2年多了,也不再从事代码工作,偶然间上到csdn翻看文章经过,看到还是有些人关注人脸识别系统的后续的,我猜大概率是学弟学妹们正在被期末实验折磨中,翻了翻原先的代码还能找到就一并更完了吧,如果抄了我

    2024年01月16日
    浏览(74)
  • 人工智能:人脸识别技术应用场景介绍

    目录 人脸识别介绍 什么是人脸识别技术 人脸识别的流程 1、场景分类 2、认证对比 3、金融领保险应用 3.1 金融行业 3.2 保险行业 4、安防交通领域 4.1 公园景点人脸识别闸机 4.2 高铁站进站人脸识别闸机 5、警务领域 5.1 抓拍交通违法 人脸识别技术是一种通过计算机技术和

    2024年02月04日
    浏览(84)
  • 人工智能在智能家居安全系统软件中的人脸识别应用

    作者:禅与计算机程序设计艺术 《人工智能在智能家居安全系统软件中的人脸识别应用》 引言 1.1. 背景介绍 随着物联网技术的发展,智能家居逐渐成为人们生活中不可或缺的一部分。智能家居系统通常包括智能门锁、智能灯光、智能插座、智能窗帘、智能家电等。其中,智

    2024年02月08日
    浏览(55)
  • 人工智能:人脸识别技术在医疗领域中的应用

    作者:禅与计算机程序设计艺术 人工智能(Artificial Intelligence,AI)已经逐渐成为当今的热点词汇。近年来,随着人工智能技术的不断进步,尤其是生物识别、图像处理、语音理解等领域取得重大突破,人工智能在医疗领域也逐渐走向成熟。目前,我国医疗卫生行业已经进入

    2024年02月08日
    浏览(63)
  • 强人工智能与人脸识别技术:未来的应用与挑战

    人工智能(Artificial Intelligence, AI)是一门研究如何让计算机模拟人类智能的学科。人工智能的主要目标是开发一种能够理解自然语言、学习自主地从经验中抽象出规律、进行推理和解决问题的计算机系统。人工智能的研究范围广泛,包括机器学习、深度学习、计算机视觉、自然

    2024年02月21日
    浏览(57)
  • 人工智能 - 人脸识别:发展历史、技术全解与实战

    本文全面探讨了人脸识别技术的发展历程、关键方法及其应用任务目标,深入分析了从几何特征到深度学习的技术演进。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证

    2024年02月05日
    浏览(52)
  • 毕业设计:基于深度学习的摄像头人脸识别系统 人工智能

    目录 前言 课题背景和意义 实现技术思路 一、算法理论基础 1.1 人脸检测技术 1.2 活体检测技术 二、 数据集 2.1 数据集 2.2 数据扩充 三、实验及结果分析 3.1 实验环境搭建 3.2 模型训练 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就

    2024年04月27日
    浏览(53)
  • 云端人工智能在人脸识别行业的应用:安全识别和个性化服务

    人脸识别技术是人工智能领域的一个重要分支,它通过对人脸特征进行分析和比较,实现对个体的识别和认证。随着云计算和人工智能技术的发展,云端人工智能在人脸识别行业的应用得到了广泛的关注和推广。本文将从以下几个方面进行阐述: 1.1 人脸识别技术的发展历程

    2024年02月21日
    浏览(46)
  • 基于Springboot+百度AI人工智能人脸识别考勤系统设计与实现

    基于Springboot+百度AI人工智能人脸识别考勤系统设计与实现  博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费

    2024年02月05日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包