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),退出循环
            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时看到的地址

    展示效果

    电脑端

    手机拍摄

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

    解释

    导入必要的库
    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创建的窗口。

    作者:宇宙第一小趴菜

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python实现手机摄像头调用详解

    发表回复