Python 调用手机摄像头

Python 调用手机摄像头

在手机上安装软件

这里以安卓手机作为演示,ISO也是差不多的
软件下载地址

注意:要想在电脑上查看手机摄像头拍摄的内容的在一个局域网里面(没有 WIFI 可以使用 热点 )

安装完打开IP摄像头服务器

在这里插入图片描述

点击分享查看IP

在这里插入图片描述

查看局域网的IP

在这里插入图片描述

用Python的Opencv写一个代码来连接手机摄像头

安装opencv-python

pip install opencv-python

注意

  • 可能安装库太慢可以这样(这里使用的是清华的镜像)
    pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/
    
  • 保存的照片在当前的py文件同级目录下面的img里面
  • 手机横着,电脑显示的也是横着,反之
    # 将图像旋转90度以竖直显示
    img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)   # 5. 旋转图像
    

使用

  • ESC: 退出界面
  • 空格: 保存手机摄像头的照片

代码

import cv2
import os# 创建窗口,设置为不能改变大小
cv2.namedWindow('camera', cv2.WINDOW_NORMAL)   # 1. 修改窗口属性,允许改变大小# 摄像头设置,这里使用的是网络摄像头的URL
video = 'http://admin:admin@192.168.1.103:8081'
capture = cv2.VideoCapture(video)   # 2. 初始化摄像头# 初始化保存图片的序号
p = 1# 开始无限循环,直到用户中断
while True:success, img = capture.read()   # 3. 从摄像头读取一帧图像if not success:print("无法抓取帧")   # 4. 如果读取失败,打印错误信息并退出循环break# 将图像旋转90度以竖直显示img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)   # 5. 旋转图像# 显示图像cv2.imshow("camera", img)   # 6. 在窗口中显示图像# 按键处理key = cv2.waitKey(10)   # 7. 等待用户按键,10毫秒响应一次if key == 27:   # 8. 如果按下ESC键(ASCII码为27),退出循环breakelif key == ord(' '):   # 9. 如果按下空格键(ASCII码为32),保存图片# 保存图片到当前目录下的img文件夹中img_folder = 'img'if not os.path.exists(img_folder):os.makedirs(img_folder)   # 10. 如果不存在img文件夹,则创建img_filename = f"{img_folder}/image_{p}.jpg"   # 11. 生成图片文件名cv2.imwrite(img_filename, img)   # 12. 保存图片print(f"Saved image {p}.jpg")p += 1   # 13. 更新图片序号# 释放摄像头资源
capture.release()
# 关闭所有OpenCV创建的窗口
cv2.destroyAllWindows()

注意

video的地址替换为查看局域网的IP时看到的地址
在这里插入图片描述

展示效果

电脑端

在这里插入图片描述

手机拍摄

在这里插入图片描述

分辨率低,也就是图片还是有点模糊

解释

导入必要的库
import cv2
import os

首先,导入cv2模块(OpenCV库)用于图像处理和视频流操作,以及os模块用于文件路径操作。

创建窗口
cv2.namedWindow('camera', cv2.WINDOW_NORMAL)

创建一个名为camera的窗口,并设置为可以改变大小。

摄像头设置
video = 'http://admin:admin@192.168.1.103:8081'
capture = cv2.VideoCapture(video)

设置网络摄像头的URL,并初始化摄像头对象。

初始化保存图片的序号
p = 1

初始化一个变量p用于保存图片时的序号。

主循环
while True:

开始一个无限循环,用于持续捕获和处理视频帧。

读取视频帧
success, img = capture.read()

从摄像头捕获一帧图像。success是一个布尔值,表示是否成功捕获帧,img是捕获到的图像。

图像旋转
if not success:print("无法抓取帧")breakimg = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)

如果未能成功捕获帧,则打印错误信息并退出循环。成功捕获后,将图像旋转90度以竖直方向显示。

显示图像
cv2.imshow("camera", img)

将旋转后的图像显示在之前创建的camera窗口中。

按键处理
key = cv2.waitKey(10)

等待用户按键操作,如果在10毫秒内有按键则响应。

if key == 27:break
elif key == ord(' '):

如果用户按下ESC键(ASCII码为27),则退出循环。如果按下空格键(ASCII码为32),则保存当前帧为图片。

保存图片
img_folder = 'img'
if not os.path.exists(img_folder):os.makedirs(img_folder)img_filename = f"{img_folder}/image_{p}.jpg"
cv2.imwrite(img_filename, img)
print(f"Saved image {p}.jpg")
p += 1

检查是否存在名为img的文件夹,如果不存在则创建。生成图片文件名,并将当前帧保存为图片。打印保存图片的信息,并更新图片序号。

释放资源
capture.release()
cv2.destroyAllWindows()

循环结束后,释放摄像头资源,并关闭所有OpenCV创建的窗口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷粒商城のNginx

文章目录 前言一、Nginx1、安装Nginx2、相关配置2.1、配置host2.2、配置Nginx2.3、配置网关 前言 本篇重点介绍项目中的Nginx配置。 一、Nginx 1、安装Nginx 首先需要在本地虚拟机执行: mkdir -p /mydata/nginx/html /mydata/nginx/logs /mydata/nginx/conf在项目…

数学建模笔记——TOPSIS[优劣解距离]法

数学建模笔记——TOPSIS[优劣解距离法] TOPSIS(优劣解距离)法1. 基本概念2. 模型原理3. 基本步骤4. 典型例题4.1 矩阵正向化4.2 正向矩阵标准化4.3 计算得分并归一化4.4 python代码实现 TOPSIS(优劣解距离)法 1. 基本概念 C. L.Hwang和 K.Yoon于1981年首次提出 TOPSIS(Techni…

Windows操作系统sid系统唯一标识符查看和修改

1、sid介绍 sid 作为windows系统唯一的标识,对某些集群业务有依赖关系,如果重复可能导致集群部署异常。 如:域控AD 就依赖 sid 功能。 但是某个云主机或虚拟机使用同一个ghost进行操作系统部署,就可能会导致重复的情况&#xf…

java-在idea中antrl的hello world

java-在idea中antrl的hello world 1. 在idea中安装ANTLR V4的插件2. 下载ANTLR的jar包3. idea中创建普通的java项目4. 创建一个Hello.g4的文件5. 使用idea生产接口文件6. java创建一个类和main方法7. 调试输出8. 参考链接 1. 在idea中安装ANTLR V4的插件 路径如下,…

为什么现在都流行开放式耳机?平价高品质蓝牙耳机推荐大赏

现在开放式耳机流行,是因为相比入耳式,它具有以下的优势: 一、佩戴舒适 开放式耳机通常设计轻盈,不直接刺激耳膜,长时间使用也不会给耳膜带来压迫感。而且其不入耳的设计不会堵塞耳道,使用较长时间后&…

Notepad++ 修改 About

1. 用这个工具,看标题,修改 1700 里的 Caption, 保存为 xx.exe, 2.修改链接,先准备如上。 2.1 使用插件 Hex Editor,拖入刚保存的 Notepad.exe 到 Notepad.exe, 按 c..S..H 2.2 按 ctrlf 查找 68 00 74 00 74 00 70 00 73 00 3…

gitlab+habor+jenkins+k8s 安装流程及配置实现CICD

以下是基本的安装流程及配置实现CICD的步骤: 安装GitLab: 安装依赖项:yum install curl policycoreutils-python openssh-server启动和设置SSH:systemctl enable sshd && systemctl start sshd安装Postfix:yum…

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-…

线程的四种操作

所属专栏:Java学习 1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链…

利士策分享,从零开始创业:一场勇敢而精彩的旅程

利士策分享,从零开始创业:一场勇敢而精彩的旅程 附上可落地执行的策略: 在创业的征途中,理论固然重要,但可落地执行的策略才是推动我们前进的实际动力。 以下是一些具体且可操作的策略,希望可以帮助你从零…

Linux grep筛选命令及管道符|详解

grep grep命令的全称为 global regular expression print,regular expression也就是正则表达式,这里是指通过正则表达式进行匹配检索 grep的用法为 grep 关键字 文件或目录路径 常用的option选项为-n,作用为显示检索出的内容所在行&#…

vue通过html2canvas+jspdf生成PDF问题全解(水印,分页,截断,多页,黑屏,空白,附源码)

前端导出PDF的方法不多,常见的就是利用canvas画布渲染,再结合jspdf导出PDF文件,代码也不复杂,网上的代码基本都可以拿来即用。 如果不是特别追求完美的情况下,或者导出PDF内容单页的话,那么基本上也就满足业…

面试—Linux

目录 ps tar netstat 文件处理命令(增删改) 文件操作(查看) 权限管理 文件搜索 网络管理 压缩命令 Vim编辑器 ps ps命令用于显示当前系统的进程状态 包括一些进程ID,终端,运行时间等 常见参数 …

《数字信号处理》学习05-单位冲击响应与系统响应

目录 一,单位冲激响应 二,LTI系统对任意序列的系统响应 三,LTI系统的性质 通过上一篇文章《数字信号处理》学习04-离散时间系统中的线性时不变系统-CSDN博客的学习,我已经知道了离散时间线性时不变系统(LTI&#x…

GQA (group query attention)

什么是GQA? 多个head的Query共用一组K和V。llama模型就用到该技术。 需要明确几点: 1.group有几组 2.每个group对应几个head 3.q以head为单位 k,v以group为单位 每个head/group特征维度都是head_dim 代码实现 import torch.nn as nn import torch …

串口通信协议(UART)

简介 uart通讯协议,是一种成本低、容易使用、通信线路简单,可实现两个设备的互相通信的协议;是一种全双工,设备点对点通信的协议。下面从硬件电路、电平标准和串口参数等方面来了解uart通信协议。 硬件电路 硬件电路非常简单&am…

深入Redis:强大的主从复制

如果某个服务器或者程序,只有一个节点(服务器),就会有很大的问题。比如可用不高,并发量也比较低。引入分布式系统,也主要是为了解决上述的单点问题。 Redis,主要部署在分布式系统上。在分布式系…

Docker容器相关命令

Docker是一种容器化技术,可以帮助用户更轻松地创建、部署和管理容器。下面是一些常见的Docker容器管理任务: 创建容器:使用Docker镜像创建一个新的容器。 docker run image_name列出容器:查看当前运行的容器列表。 docker ps启动容…

无人机之地面站篇

无人机的地面站,又称无人机控制站,是整个无人机系统的重要组成部分,扮演着作战指挥中心的角色。以下是对无人机地面站的详细阐述: 一、定义与功能 无人机地面站是指具有对无人机飞行平台和任务载荷进行监控和操纵能力的一组设备&…

CCPC网络预选赛感想

背景 断更了几天的比赛题解,是因为去打ccpc预选赛去了) 第一天 第一天是热身赛,就我和t去了,l回去家里取东西。这也是我和t的第一次线下见面吧qwq,很强很帅的一个大一新生(分分钟薄纱我)。 …