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

摄像头调用

使用python调用电脑摄像头

代码展示

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

安装库

这个代码引用了第三方库在运行前我们提前安装一下

打开电脑终端,输入以下命令,等待即可,(要在网络环境好的情况下)

javascript 复制代码
pip install opencv-python

代码解释

打开摄像头获取视频流:

javascript 复制代码
cap = cv2.VideoCapture(0)

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

循环读取和显示视频帧

javascript 复制代码
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 就是要显示的图像帧内容。

检测按键并退出循环

javascript 复制代码
if cv2.waitKey(5) >= 0:
        break

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

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

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

javascript 复制代码
import cv2
import numpy as np

cap = cv2.VideoCapture(0)
while cap.isOpened():
    retval, frame = cap.read()
    if retval:
        height, width = frame.shape[:2]
        # 定义要添加马赛克的区域(这里以图像中心部分为例)
        x_start = width // 4
        y_start = height // 4
        x_end = width * 3 // 4
        y_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] = mosaic

        cv2.imshow('Mosaic Live', frame)
    if cv2.waitKey(5) >= 0:
        break

cap.release()
cv2.destroyAllWindows()

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

相关推荐
2501_921649497 小时前
原油期货量化策略开发:历史 K 线获取、RSI、MACD 布林带计算到多指标共振策略回测
后端·python·金融·数据分析·restful
真心喜欢你吖7 小时前
统信操作系统UOS部署安装OpenClaw+飞书接入完整教程(国产大模型配置)
人工智能·python·语言模型·大模型·openclaw·小龙虾
用户8356290780517 小时前
使用 Python 自动生成 Excel 柱状图的完整指南
后端·python
xcbrand7 小时前
口碑好的品牌策划厂家
大数据·人工智能·python
liu****7 小时前
LangChain-AI应用开发框架(七)
人工智能·python·langchain·大模型应用·本地部署大模型
hhcgchpspk7 小时前
网速上传下载流量监测工具尝试
网络·python·cmd·psutil
飞Link7 小时前
大模型时代的“语言编程”:Prompt Engineering (提示词工程) 深度解析与实战指南
开发语言·python·prompt
郝学胜-神的一滴8 小时前
Socket实战:从单端聊天到多用户连接的实现秘籍
服务器·开发语言·python·网络协议·pycharm
zzwq.8 小时前
线程池与进程池:concurrent.futures高效并发
python
Ricardo-Yang8 小时前
SCNP语义分割边缘logits策略
数据结构·人工智能·python·深度学习·算法