Python 调用手机摄像头
Python 调用手机摄像头
在手机上安装软件
这里以安卓手机作为演示,ISO也是差不多的
软件下载地址
注意:要想在电脑上查看手机摄像头拍摄的内容的在一个局域网里面(没有 WIFI 可以使用 热点 )
安装完打开IP摄像头服务器

点击分享查看IP

查看局域网的IP

用Python的Opencv写一个代码来连接手机摄像头
安装opencv-python
pip install opencv-python 注意
保存的照片在当前的py文件同级目录下面的img里面
手机横着,电脑显示的也是横着,反之
# 将图像旋转90度以竖直显示 img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)# 5. 旋转图像可能安装库太慢可以这样(这里使用的是清华的镜像)
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/ 使用
- 窗口和手机一样竖直显示
- 按 ESC 键退出:key == 27 用于检测 ESC 键被按下。当检测到 ESC 键时,循环终止并退出。
- 按 空格键 保存图片:当按下空格键时,图片被保存,并且文件名基于当前的时间戳。
代码
import cv2 import os from datetime import datetime # 创建窗口,设置为不能改变大小 cv2.namedWindow('camera', cv2.WINDOW_NORMAL)# 1. 修改窗口属性,允许改变大小# 摄像头设置,这里使用的是网络摄像头的URL video ='http://admin:[email protected]:8081' capture = cv2.VideoCapture(video)# 2. 初始化摄像头# 开始无限循环,直到用户中断whileTrue: success, img = capture.read()# 3. 从摄像头读取一帧图像ifnot 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'ifnot os.path.exists(img_folder): os.makedirs(img_folder)# 10. 如果不存在img文件夹,则创建# 使用时间戳作为文件名 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") img_filename =f"{img_folder}/{timestamp}.jpg"# 11. 生成图片文件名 cv2.imwrite(img_filename, img)# 12. 保存图片print(f"Saved image {timestamp}.jpg")# 释放摄像头资源 capture.release()# 关闭所有OpenCV创建的窗口 cv2.destroyAllWindows()注意
video的地址替换为查看局域网的IP时看到的地址

展示效果
电脑端

手机拍摄

分辨率低,也就是图片还是有点模糊
解释
导入必要的库
import cv2 import os 首先,导入cv2模块(OpenCV库)用于图像处理和视频流操作,以及os模块用于文件路径操作。
创建窗口
cv2.namedWindow('camera', cv2.WINDOW_NORMAL)创建一个名为camera的窗口,并设置为可以改变大小。
摄像头设置
video ='http://admin:[email protected]:8081' capture = cv2.VideoCapture(video)设置网络摄像头的URL,并初始化摄像头对象。
初始化保存图片的序号
p =1初始化一个变量p用于保存图片时的序号。
主循环
whileTrue:开始一个无限循环,用于持续捕获和处理视频帧。
读取视频帧
success, img = capture.read()从摄像头捕获一帧图像。success是一个布尔值,表示是否成功捕获帧,img是捕获到的图像。
图像旋转
ifnot success:print("无法抓取帧")break img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)如果未能成功捕获帧,则打印错误信息并退出循环。成功捕获后,将图像旋转90度以竖直方向显示。
显示图像
cv2.imshow("camera", img)将旋转后的图像显示在之前创建的camera窗口中。
按键处理
key = cv2.waitKey(10)等待用户按键操作,如果在10毫秒内有按键则响应。
if key ==27:breakelif key ==ord(' '):如果用户按下ESC键(ASCII码为27),则退出循环。如果按下空格键(ASCII码为32),则保存当前帧为图片。
保存图片
img_folder ='img'ifnot os.path.exists(img_folder): os.makedirs(img_folder) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") img_filename =f"{img_folder}/{timestamp}.jpg" cv2.imwrite(img_filename, img)print(f"Saved image {timestamp}.jpg")检查是否存在名为img的文件夹,如果不存在则创建。生成图片文件名,并将当前帧保存为图片。打印保存图片的信息,并更新图片序号。
释放资源
capture.release() cv2.destroyAllWindows()循环结束后,释放摄像头资源,并关闭所有OpenCV创建的窗口。
👇 源码资料获取 · 技术与交流 👇