【python】摄像头调用马赛克恶搞

embedded/2024/11/29 0:24:34/

摄像头调用

  • 代码展示
  • 安装库
  • 代码解释
  • 实时视频画面添加马赛克效果

使用python调用电脑摄像头

代码展示

import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):retval, frame = cap.read()cv2.imshow('Live', frame)if cv2.waitKey(5) >= 0:break
shao

安装库

这个代码引用了第三方库在运行前我们提前安装一下
打开电脑终端,输入以下命令,等待即可,(要在网络环境好的情况下)

pip install opencv-python

代码解释

打开摄像头获取视频流:

cap = cv2.VideoCapture(0)

这里创建了一个 VideoCapture 对象 cap,参数 0 表示使用默认的摄像头设备(如果有多个摄像头,可更改参数为对应的摄像头索引,比如 1、2 等),这个对象用于从摄像头捕获视频帧数据。

循环读取和显示视频帧

while(cap.isOpened()):retval, frame = cap.read()cv2.imshow('Live', frame)
  • while(cap.isOpened()) 这个循环条件判断摄像头是否成功打开并且可以继续获取视频帧,只要摄像头处于正常打开状态,循环就会持续执行。
  • retval, frame = cap.read() 调用 VideoCapture 对象的 read 方法,它会从摄像头读取一帧图像数据,返回两个值,retval 是一个布尔值,表示是否成功读取到帧(True 表示成功,False 表示读取失败,比如摄像头出现故障或者已经到视频末尾等情况),frame 就是实际读取到的图像帧数据(以多维数组的形式表示图像像素信息,例如常见的三维数组表示彩色图像的高度、宽度以及颜色通道信息
  • cv2.imshow(‘Live’, frame) 使用 imshow 函数将读取到的图像帧显示出来,第一个参数 ‘Live’ 是显示窗口的标题,第二个参数 frame 就是要显示的图像帧内容。

检测按键并退出循环

if cv2.waitKey(5) >= 0:break

cv2.waitKey(5) 函数会等待用户按键操作,参数 5 表示等待的时间(单位是毫秒),在这个时间内如果用户按下了键盘上的任意键,该函数会返回按键对应的 ASCII 码值(如果没有按键则返回 -1),当返回值大于等于 0 时,就意味着有按键按下,通过 break 语句跳出循环,结束视频帧的读取和显示过程。

实时视频画面添加马赛克效果

以下代码可以实现对摄像头实时获取的视频画面中的特定区域(这里以图像中心区域为例,你可以自行修改范围)添加马赛克效果,让画面呈现出一种模糊、块状的样子。(画风离谱)

import cv2
import numpy as npcap = cv2.VideoCapture(0)
while cap.isOpened():retval, frame = cap.read()if retval:height, width = frame.shape[:2]# 定义要添加马赛克的区域(这里以图像中心部分为例)x_start = width // 4y_start = height // 4x_end = width * 3 // 4y_end = height * 3 // 4# 获取要马赛克的区域图像region = frame[y_start:y_end, x_start:x_end]# 缩小图像尺寸(马赛克的原理是用块状像素表示,这里先缩小)small = cv2.resize(region, (0, 0), fx=0.1, fy=0.1)# 再放大回原尺寸,就形成了马赛克效果mosaic = cv2.resize(small, (x_end - x_start, y_end - y_start), interpolation=cv2.INTER_NEAREST)# 将马赛克区域替换原图像中的对应区域frame[y_start:y_end, x_start:x_end] = mosaiccv2.imshow('Mosaic Live', frame)if cv2.waitKey(5) >= 0:breakcap.release()
cv2.destroyAllWindows()

就分享到这里,本来还想写点别的摄像头调用的,还有很多有趣的项目,比如人脸识别,实时视频添加卡通化效果,还有素描效果,都是可以做到的,只是一开始写的不满意,回头优化优化在发布


http://www.ppmy.cn/embedded/141299.html

相关文章

透明化教育管理:看板如何提升班级整体效率

随着教育信息化的不断推进,传统的教学和班级管理方式逐渐暴露出时间紧、任务繁、多任务并行等问题。看板管理,作为一种高效的可视化工具,正在成为教师管理教学、提升班级协作与互动的重要利器。通过透明化、系统化的管理方式,看板…

Spring-02-springmvc

2. 什么是SpringMVC 2.1. 概述 Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。 为什么要学习SpringMVC呢? Spring MVC的特点: 轻量级,简单易学高效 , 基于请求响应的MVC框架与Spring兼容性好,无缝…

在接口实现时使用自定义对象的方法(非工具类,和单例模式)

接口实现的要求:如果是在实现接口的方法中创建对象,并且接口方法的定义中没有包含对该对象方法的调用,那么在实现类中也不应该调用该对象的方法。这是因为接口定义了一组规范,实现类应该遵循这些规范,而不是随意添加额…

git 命令查询

git 命令查询 创建命令 Create Git 指令命令说明 git clone <url> 克隆远程仓库 git init 初始化本地 git 仓库&#xff08;即创建新的本地仓库&#xff09; 本地更改 Local Changes Git 指令命令说明 git status 查看当前分支状态 git diff 查看已跟踪文件的变更 gi…

小米C++ 面试题及参考答案下(120道面试题覆盖各种类型八股文)

指针和引用的区别?怎么实现的? 指针和引用有以下一些主要区别。 从概念上来说,指针是一个变量,它存储的是另一个变量的地址。可以通过指针来间接访问所指向的变量。例如,我们定义一个整型指针int *p;,它可以指向一个整型变量的内存地址。而引用是一个别名,它必须在定义的…

[241127] Mistral AI 更新 Le Chat,免费提供前沿 AI 助手!| TrendForce 预测 2025 十大科技趋势

目录 Mistral AI 更新 Le Chat&#xff0c;免费提供前沿 AI 助手&#xff01;TrendForce 预测 2025 十大科技趋势 Mistral AI 更新 Le Chat&#xff0c;免费提供前沿 AI 助手&#xff01; Mistral AI 宣布对其免费 AI 助手 Le Chat 进行重大更新&#xff0c;新增多项强大功能&…

IPVS与Keepalived

Keepalived VRRP虚拟路由冗余协议 虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议&#xff0c;1998年已推出正式的RFC2338协议标准。VRRP广泛应用在边缘网络中&#xff0c;它的…

Flink 任务启动脚本-V2(包括ck启动)

#!/bin/bash#crontab时设置&#xff0c;如果依赖其他环境变量配置&#xff0c;可以在脚本执行一下环境变量脚本 source /etc/profile# 进入脚本目录 curdirdirname "$0" curdircd "$curdir"; pwd echo "进入启动脚本目录 $curdir"# 定义应用程序…