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

Python3.6.6 OpenCV 将视频中人物标记或者打马赛克或加图片并保存为不同格式

1、轻松识别视频人物并做出标记

需安装face_recongnition与dlib,过程有点困难,还请网上查找方法

import face_recognition
import cv2
#镜像源 -i https://pypi.mirrors.ustc.edu.cn/simple 
# 加载视频
video_file = 'E:\\videos\\1.mp4'
video_capture = cv2.VideoCapture(video_file)width = int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(video_capture.get(cv2.CAP_PROP_FPS))
frame_count = int(video_capture.get(cv2.CAP_PROP_FRAME_COUNT))# 设置视频格式
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 调用VideoWrite()函数
size = (int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
video_writer = cv2.VideoWriter('output1.avi', fourcc, fps, size)count = 0 
# 通过循环读取视频的每一帧
while True and count < 200:ret, frame = video_capture.read()# 如果正确读取帧,ret为Trueif not ret:break# 将帧转换为灰度图像,因为人脸识别对颜色不敏感gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 使用face_recognition库的API进行人脸定位face_locations = face_recognition.face_locations(gray_frame)# 遍历所有找到的人脸for top, right, bottom, left in face_locations:# 画出人脸框cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)# 显示帧#cv2.imshow('Video', frame)if not video_writer is False:video_writer.write(frame)count = count + 1# 按'q'退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放视频捕获对象
video_capture.release()
# 关闭所有OpenCV窗口
cv2.destroyAllWindows()

实现效果

2、实现视频人物加图,代码如下

import cv2
import numpy as np
import face_recognition
from PIL import Image # 加载视频
cap = cv2.VideoCapture('E:\\videos\\1.mp4')# 图片加密马赛克
def apply_mosaic(frame, mosaic_image, x, y, w, h):#print(mosaic_image.shape)mosaic_image = cv2.resize(mosaic_image, (w, h))#print(mosaic_image.shape)#cv2.imwrite('1.png',mosaic_image)#roi = frame[y:y+h, x:x+w]image_np = np.array(mosaic_image)#print(mosaic_image.shape)#print(frame.shape)#frame[y:y+h, x:x+w] = image_np#cv2.addWeighted(mosaic_image, 0, roi, 1, 0)for i in range(h):for j in range(w):#if(y+i<frame_height and x+j<frame_width):frame[x+i, y+j] = image_np[i, j]
# 加载图片
mosaic_image = cv2.imread('masaike.png')# 读取视频的宽度和高度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 设置马赛克的位置和大小
x, y, w, h = 50, 50, 100, 100# 写入视频
#out = cv2.VideoWriter('output_video.avi', cv2.VideoWriter_fourcc(*'XVID'), 20.0, (frame_width, frame_height))width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(cap.get(cv2.CAP_PROP_FPS))
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))# 设置视频格式
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 调用VideoWrite()函数
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
video_writer = cv2.VideoWriter('output2.avi', fourcc, fps, size)count = 0 while cap.isOpened() and count < 250:ret, frame = cap.read()if ret and count > 50:# 将帧转换为灰度图像,因为人脸识别对颜色不敏感gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 使用face_recognition库的API进行人脸定位face_locations = face_recognition.face_locations(gray_frame)# 遍历所有找到的人脸for top, right, bottom, left in face_locations:# 画出人脸框#cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)# 应用马赛克apply_mosaic(frame, mosaic_image, top, left, abs(top-bottom), abs(right-left))# 输出帧video_writer.write(frame)count = count + 1# 显示帧#cv2.imshow('Video', frame)# 按 'q' 退出循环if cv2.waitKey(1) & 0xFF == ord('q'):breakelif count >= 250:breakcount = count + 1# 释放资源
cap.release()
video_writer.release()
cv2.destroyAllWindows()

实现效果如下

至此完成,谢谢阅读 

相关文章:

Python3.6.6 OpenCV 将视频中人物标记或者打马赛克或加图片并保存为不同格式

1、轻松识别视频人物并做出标记 需安装face_recongnition与dlib&#xff0c;过程有点困难&#xff0c;还请网上查找方法 import face_recognition import cv2 #镜像源 -i https://pypi.mirrors.ustc.edu.cn/simple # 加载视频 video_file E:\\videos\\1.mp4 video_capture …...

Readiris PDF Corporate / Business v23 解锁版安装教程 (PDF管理软件)

前言 Readiris PDF Corporate / Business 是一款高性能的 OCR&#xff08;光学字符识别&#xff09;软件&#xff0c;能够帮助用户将纸质文档、PDF 文件或图像文件转换为可编辑和可搜索的电子文本。该软件提供专业级的功能和特性&#xff0c;非常适合企业和商业使用。使用 Rea…...

.NET MAUI开源架构_2.什么是 .NET MAUI?

1.什么是.NET MAUI&#xff1f; .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。使用 .NET MAUI&#xff0c;可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。 .NET MAUI 是一款…...

认知偏差知识手册

The Connector 每周会选取我从信息流里获取的有价值内容&#xff0c;包括 AI 探索专题、Github 开源库推荐、工具介绍和一些文章书籍等&#xff0c;目标是链接互联网上的优质内容&#xff0c;获得更多的灵感和知识&#xff0c;从而激发彼此的创造力。 AI 探索 主流推理框架在…...

SpringBoot后端代码基本逻辑

数据持久化&#xff08;Dao---Entity---mapper&#xff09; 配置&#xff08;application.yml&#xff09; server:port: 10086 ​ spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/wiki?useUnicodetrue&characterEnco…...

Python学生信息管理系统的设计与实现

在本篇博客中&#xff0c;我们将深入探讨一个基于Python的简单学生信息管理系统的设计与实现过程。这个系统允许用户执行诸如添加、删除、修改和查询学生信息等操作。我们将逐步解析代码&#xff0c;理解其中的关键概念和编程实践。 1. 系统概述 该系统由几个核心功能组成&am…...

最优雅的PHP框架 Laravel

Laravel 之所以被称为最优雅的 PHP 框架,是因为它在设计和功能上做了很多独特的创新,极大地提高了开发效率和代码的可维护性。以下是 Laravel 受欢迎的主要原因: 良好的文档和社区支持 Laravel 有详尽的官方文档,涵盖了框架的所有功能和用法。此外,Laravel 社区非常活跃…...

log4j2的日志框架(详细,springboot和异步日志的实现)

目录 log4j2的介绍 Log4j2的性能 SpringBoot中的使用Log4j2 log4j2的进阶--异步日志 AsyncAppender方式 AsyncLogger方式 log4j2的介绍 Apache Log4j 2是对Log4j的升级版&#xff0c;参考了logback的一些优秀的设计&#xff0c;并且修复了一些问题&#xff0c;因此带 来…...

taocms 3.0.1 本地文件泄露漏洞(CVE-2021-44983)

前言 CVE-2021-44983 是一个影响 taoCMS 3.0.1 的远程代码执行&#xff08;RCE&#xff09;漏洞。该漏洞允许攻击者通过上传恶意文件并在服务器上执行任意代码来利用这一安全缺陷。 漏洞描述 taoCMS 是一个内容管理系统&#xff08;CMS&#xff09;&#xff0c;用于创建和管…...

SpringBoot实战:处理全局异常

1. 导入springmvc依赖 2.定义全局异常处理类 //定义全局异常处理器&#xff0c;可捕获控制层抛出的异常 ControllerAdvice public class GlobalExceptionHandler {//当控制层抛出Exception异常时会被该方法捕获&#xff0c;并执行该方法ExceptionHandler(Exception.class)Res…...

pdf只要前几页,pdf中只要前几页怎么处理

在处理pdf文件时&#xff0c;我们有时只需要其中的一页或几页&#xff0c;而不是整个文档。那么&#xff0c;如何快速且高效地从pdf中提取单独的一页呢&#xff1f;本文将为你揭示几种简单易行的方法&#xff0c;让你轻松实现这一目标。 使用 “轻云处理pdf官网” 打开 “轻云…...

实变函数精解【4】

文章目录 说明点集与测度开集的极限点集定义与解释开集的导集特性示例结论 导集一、定义二、特点三、性质四、应用五、总结 边界点与聚点的区别一、定义二、性质与区别三、结论 有界点集与测度有界点集的测度不一定有限分析原因结论注意事项 测度有限的点集&#xff0c;不一定有…...

【BUG】Python3|COPY 指令合并 ts 文件为 mp4 文件时长不对(含三种可执行源代码和解决方法)

文章目录 前言源代码FFmpeg的安装1 下载2 安装 前言 参考&#xff1a; python 合并 ts 视频&#xff08;三种方法&#xff09;使用 FFmpeg 合并多个 ts 视频文件转为 mp4 格式 Windows 平台下&#xff0c;用 Python 合并 ts 文件为 mp4 文件常见的有三种方法&#xff1a; 调用…...

AI克隆声音,基于函数计算部署GPT-Sovits语音生成模型

阿里云的基于函数计算部署GPT-Sovits语音生成模型 可以直接文字转语音&#xff0c;也可以上传一段自己的语音&#xff0c;根据你上传的语音进行语音播报。 一、打开阿里云的函数计算 https://developer.aliyun.com/adc/scenario/808348a321844a62b922187d89cd5077 还是 函数…...

DP讨论——建造者模式

学而时习之&#xff0c;温故而知新。 敌人出招&#xff08;使用场景&#xff09; 组合关系中&#xff0c;如果要A对象创建B对象&#xff0c;或者要A对象创建一堆对象&#xff0c;这种是普遍的需求。 你出招 这种适合创建者模式&#xff0c;我感觉也是比较常见的。 构造函数…...

【JavaScript】解决 JavaScript 语言报错:Uncaught SyntaxError: Unexpected token

文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 缺少必要的语法元素2. 使用了不正确的字符或符号3. JSON 格式错误4. 字符串未正确闭合 四、解决方案与预防措施1. 检查语法元素2. 正确使用符号和字符3. 修正 JSON 格式4. 字符串闭合 五、示例代码和实践建议…...

oracle数据库的plsql免安装版安装

这个是连接oracle数据库的&#xff0c;注意安装不能有中文路径。以下只是示例。 1、打开D:\ruanjian\plsql\plsql\plsql&#xff0c;发送plsqldev.exe快捷方式到桌面。 2、新弹出的页面填写cancel,什么也不写。 3、将instanceclient解压&#xff0c;并复制文件路径。 修改tool…...

stm32使用通用定时器生成pwm

Driver_TIM5.c 通用定时器的通道1和2可以做时钟源 #include "Driver_TIM5.h"void Driver_TIM5_Init(void) {/* 1. 开启时钟*//* 1.1 定时器5的时钟 */RCC->APB1ENR | RCC_APB1ENR_TIM5EN;/* 1.2 GPIO的时钟 PA */RCC->APB2ENR | RCC_APB2ENR_IOPAEN;/* 2. 设…...

老物件线上3D回忆展拓宽了艺术作品的展示空间和时间-深圳华锐视点

在数字技术的浪潮下&#xff0c;3D线上画展为艺术家们开启了一个全新的展示与销售平台。这一创新形式不仅拓宽了艺术作品的展示空间&#xff0c;还为广大观众带来了前所未有的观赏体验。 3D线上画展制作以其独特的互动性&#xff0c;让艺术不再是单一的视觉享受。在这里&#x…...

对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。

对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式&#xff08;多对多、多表查询、子查询等&#xff09;。 一、 前端界面需要展现多个表的其中几个数据的多表查询。1. 三个表查询其中字段返回&#xff1a;&#xff08;用一下sql语句&#xff…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...