Python 调用手机摄像头

宇宙第一小趴菜 2024-09-11 11:35:01 阅读 53

Python 调用手机摄像头

在手机上安装软件

<code>这里以安卓手机作为演示,ISO也是差不多的

软件下载地址

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

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

在这里插入图片描述

点击分享查看IP

在这里插入图片描述

查看局域网的IP

在这里插入图片描述

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

安装opencv-python

<code>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),退出循环

break

elif 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时看到的地址

在这里插入图片描述

展示效果

电脑端

在这里插入图片描述

手机拍摄

在这里插入图片描述

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

解释

导入必要的库

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("无法抓取帧")

break

img = 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创建的窗口。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。