当前位置: 首页 > news >正文

delaunay和voronoi图 人脸三角剖分

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

import dlib
import cv2predictor_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')

实现人脸三角剖分:

# 日期:  2023/11/2 23:04
import cv2
import numpy as np
import random# 检查点是否在矩形框内
def rect_contains(rect, point):if point[0] < rect[0]:return Falseelif point[1] < rect[1]:return Falseelif point[0] > rect[2]:return Falseelif point[1] > rect[3]:return Falsereturn 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.shaper = (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()# 矩形框用于Subdiv2Dsize = img.shape    # h, w, channel# x,y,w,hrect = (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图 人脸三角剖分

先获取人脸68个特征点坐标&#xff0c;其中使用了官方的预训练模型shape_predictor_68_face_landmarks.dat&#xff1a; import dlib import cv2predictor_path "shape_predictor_68_face_landmarks.dat" png_path "face.jpg"txt_path "points.tx…...

MySQL数据库之表的增删查改

目录 表的操作1.创建表创建表案例 2.查看表结构3.修改表4.删除表 表的操作 1.创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a; field 表示列…...

(论文阅读11/100)Fast R-CNN

文献阅读笔记 简介 题目 Fast R-CNN 作者 Ross Girshick 原文链接 https://arxiv.org/pdf/1504.08083.pdf 目标检测系列——开山之作RCNN原理详解-CSDN博客 Fast R-CNN讲解_fast rcnn-CSDN博客 Rcnn、FastRcnn、FasterRcnn理论合集_rcnn fastrcnn fasterrcnn_沫念的博客…...

Git 标签(Tag)实战:打标签和删除标签的步骤指南

目录 前言使用 Git 打本地和远程标签&#xff08;Tag&#xff09;删除本地和远程 Git 标签&#xff08;Tag&#xff09;开源项目标签&#xff08;Tag&#xff09;实战打标签删除标签 结语开源微服务商城项目前后端分离项目 前言 在开源项目中&#xff0c;版本控制是至关重要的…...

React 底层 Fiber 架构 简单理解

一、 背景 JS 是引擎是单线程运行的&#xff1b;严格来说&#xff0c;JS 引擎和页面渲染引擎在同一渲染线程&#xff0c;两者互斥。那么就会遇到这样的一种情况&#xff1a;当前面一个任务长期霸占CPU&#xff0c;后面啥事也干不了&#xff0c;浏览器卡死&#xff0c;造成极差…...

使用 Python 进行自然语言处理第 4 部分:文本表示

一、说明 本文是在 2023 年 3 月为 WomenWhoCode 数据科学跟踪活动发表的系列文章中。早期的文章位于&#xff1a;第 1 部分&#xff08;涵盖 NLP 简介&#xff09;、第 2 部分&#xff08;涵盖 NLTK 和 SpaCy 库&#xff09;、第 2 部分&#xff08;涵盖NLTK和SpaCy库&#xf…...

【LLM】大语言模型高效微调方案Lora||直击底层逻辑

大白话: DL的本质就是矩阵的乘法&#xff0c;就能实现LLM, 假设两个矩阵都很大&#xff0c;一个mxn,一个nxd的矩阵&#xff0c;m,n,d这几个数字可能几千甚至上万的场景&#xff0c;计算起来代价很大&#xff0c;如果我们可以small 这些数字&#xff0c;缩小到10甚至5这样的s…...

Qt for Android代码中输出日志

#include <QtDebug>qInfo() << "hello"; 如上&#xff0c;加入头文件&#xff08;注意&#xff1a;这里的头文件是QtDebug&#xff0c;不是QDebug&#xff0c;也不知道啥时候改的&#xff0c;也不知道有啥区别&#xff0c;先这样吧&#xff09;后使用qI…...

力扣刷题-二叉树-二叉树的递归遍历

本文讲解二叉树的前序遍历、后序遍历、中序遍历。 思路 每次写递归&#xff0c;都按照这三要素来写&#xff0c;可以保证大家写出正确的递归算法&#xff01; 确定递归函数的参数和返回值&#xff1a; 确定哪些参数是递归的过程中需要处理的&#xff0c;那么就在递归函数里加…...

VX-3R APRS发射试验

VX-3R本身是不带APRS功能的&#xff0c;不过可能通过外加TNC实现APRS功能。 有大佬已经用Arduino实现了相应的发射功能&#xff1a; https://github.com/handiko/Arduino-APRS 我要做的&#xff0c;就是简单修改一下代码&#xff0c;做一个转接板。 YEASU官方没有给出VX-3R的音…...

JAVA毕业设计109—基于Java+Springboot+Vue的宿舍管理系统(源码+数据库)

基于JavaSpringbootVue的宿舍管理系统(源码数据库)109 一、系统介绍 本系统前后端分离 本系统分为学生、宿管、超级管理员三种角色 1、用户&#xff1a; 登录、我的宿舍、申请调宿、报修申请、水电费管理、卫生检查、个人信息修改。 2、宿管&#xff1a; 登录、用户管理…...

CMU/MIT/清华/Umass提出生成式机器人智能体RoboGen

文章目录 导读1. Introduction2. 论文地址3. 项目主页4. 开源地址5. RoboGen Pipeline6. Experimental Results作者介绍Reference 导读 CMU/MIT/清华/Umass提出的全球首个生成式机器人智能体RoboGen&#xff0c;可以无限生成数据&#xff0c;让机器人7*24小时永不停歇地训练。…...

STM32:AHT20温湿度传感器驱动程序开发

注&#xff1a;温湿度传感器AHT20数据手册.pdf http://www.aosong.com/userfiles/files/AHT20%E4%BA%A7%E5%93%81%E8%A7%84%E6%A0%BC%E4%B9%A6(%E4%B8%AD%E6%96%87%E7%89%88)%20B1.pdf 一、分析AHT数据手册文档 (1).准备工作 1.新建工程。配置UART2 2.配置I2C1为I2C标准模式&…...

【Linux】第七站:vim的使用以及配置

文章目录 一、vim1.vim的介绍2.vim基本使用3.vim的命令模式常用命令4.底行模式 二、vim的配置 一、vim 1.vim的介绍 vim编辑器&#xff0c;用来文本编写&#xff0c;可以写代码 它是一个多模式的编辑器 它有很多的模&#xff0c;不过我们暂时先只考虑这三种模式 命令模式插入模…...

汇编-算术运算符

下面给出了一些有效表达式和它们的值&#xff1a;...

线性代数 第六章 二次型

一、矩阵表示 称为二次型的秩。只含有变量的平方项&#xff0c;所有混合项系数全是零&#xff0c;称为标准形&#xff1b;平方项的系数为1、-1或0&#xff0c;称为规范形。 二次型的标准形不唯一&#xff0c;可以用不用的坐标变换化二次型为标准形&#xff1b;二次型的规范形唯…...

leetCode 213. 打家劫舍 II + 动态规划 + 从记忆化搜索到递推 + 空间优化

关于此题我的往期文章,动规五部曲详解篇&#xff1a; leetCode 213. 打家劫舍 II 动态规划 房间连成环怎么偷呢&#xff1f;_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://heheda.blog.csdn.net/article/details/133409962213. 打家劫舍 II - 力扣&#x…...

网络编程套接字(二)

目录 简单的TCP网络程序服务端创建套接字服务端绑定服务端监听服务端获取连接服务端处理请求单执行流服务器的弊端 多进程版TCP网络程序捕捉SIGCHLD信号让孙子进程提供服务多线程版的TCP网络程序客户端创建套接字客户端链接服务器客户端发起请求 线程池版的TCP网络程序 简单的T…...

[极客大挑战 2019]Knife 1(两种解法)

题目环境&#xff1a; 这道题主要考察中国菜刀和中国蚁剑的使用方法 以及对PHP一句话木马的理解 咱们先了解一下PHP一句话木马&#xff0c;好吗&#xff1f; **eval($_POST["Syc"]);** **eval是PHP代码执行函数&#xff0c;**把字符串按照 PHP 代码来执行。 $_POST P…...

国家统计局教育部各级各类学历教育学生情况数据爬取

教育部数据爬取 1、数据来源2、爬取目标3、网页分析4、爬取与解析5、如何使用Excel打开CSV1、数据来源 国家统计局:http://www.stats.gov.cn/sj/ 教育部:http://www.moe.gov.cn/jyb_sjzl/ 数据来源:国家统计局教育部文献教育统计数据2021年全国基本情况(各级各类学历教育学…...

机器学习在资产管理中的应用:从数据到投资组合的端到端框架

1. 项目概述&#xff1a;当机器学习遇见资产管理如果你在资产管理行业待过&#xff0c;或者对量化投资感兴趣&#xff0c;那你肯定不止一次想过&#xff1a;那些复杂的市场数据、财报、新闻&#xff0c;能不能让机器来帮我们分析&#xff0c;甚至做出决策&#xff1f;firmai/ma…...

XSP25全协议 100W PD快充诱骗芯片_串口读电压电流信息

在Type-C快充技术普及的今天&#xff0c;快充诱骗协议芯片成为小家电、智能硬件、锂电设备等产品实现高效取电的核心器件。XSP25作为汇铭达推出的Type‑C受电端&#xff08;Sink&#xff09;多功能快充取电芯片&#xff0c;以全协议兼容、100W大功率输出、串口智能通信、极简外…...

宁波市新房装修推荐

好的&#xff0c;根据您的要求&#xff0c;我为您生成一篇关于宁波市新房装修的推荐文章&#xff0c;着重推荐宿迁市三色雨装饰材料有限公司的墙布产品&#xff0c;语言力求自然、真实&#xff0c;避免营销话术。宁波新房装修&#xff0c;墙面选择不妨多看看“三色雨”在宁波&a…...

本地优先 Web 应用开发:React/SQLite 前端、Supabase 后端与 PowerSync 同步引擎实践

本地优先 Web 应用开发&#xff1a;React/SQLite 前端、Supabase 后端与 PowerSync 同步引擎的实践与优势并非每天都会出现全新架构&#xff0c;如今浏览器内的 SQLite 结合响应式 SQL 和自动同步功能出现了&#xff0c;它能让前端即时交互&#xff0c;还能保持与后端数据一致&…...

移动端AI智能体Operit AI:打造离线可编程的Android全能助手

1. 项目概述&#xff1a;在手机上构建你的全能AI副驾如果你和我一样&#xff0c;是个重度效率工具爱好者&#xff0c;同时又对AI技术充满好奇&#xff0c;那么你肯定也经历过这样的困境&#xff1a;手机上的AI助手&#xff0c;要么是功能单一的聊天机器人&#xff0c;要么就是需…...

Starter计划配额耗尽预警失效?我们逆向解析其API响应头,发现3个未文档化的速率控制暗门

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Starter计划配额耗尽预警失效&#xff1f;我们逆向解析其API响应头&#xff0c;发现3个未文档化的速率控制暗门 在对 Starter 计划的 API 调用行为进行深度监控时&#xff0c;我们观察到配额耗尽告警频…...

开源状态监控工具openclaw-status:从原理到部署的完整实践指南

1. 项目概述&#xff1a;一个开源状态监控工具的诞生最近在折腾一个开源项目&#xff0c;叫openclaw-status&#xff0c;是vibe-with-me-tools组织下的一个子项目。简单来说&#xff0c;这是一个用于监控和展示各种服务、应用、设备状态的工具。听起来是不是有点像那些商业化的…...

基于MCP协议构建AI知识库:解决会话失忆,实现知识持久化

1. 项目概述&#xff1a;让AI拥有自己的“亚历山大图书馆”如果你和我一样&#xff0c;长期与Claude Code、Cursor这类AI编程助手打交道&#xff0c;一定会遇到一个核心痛点&#xff1a;会话失忆。每次开启一个新对话&#xff0c;AI助手就像一张白纸&#xff0c;它对你项目的历…...

英雄联盟R3nzSkin换肤工具:5分钟快速上手免费皮肤解锁指南

英雄联盟R3nzSkin换肤工具&#xff1a;5分钟快速上手免费皮肤解锁指南 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 还在为英雄联盟国服昂贵的皮肤价…...

终极Steam创意工坊下载器:WorkshopDL让你在非Steam平台也能畅玩模组!

终极Steam创意工坊下载器&#xff1a;WorkshopDL让你在非Steam平台也能畅玩模组&#xff01; 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在Epic Games Store或GOG平台…...