opencv-python连接计算机摄像头,连接手机摄像头

前言

提醒:

文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。

其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。

文章目录


环境搭建

可参考以下案例进行环境安装
Python+OpenCV 调用手机摄像头并实现人脸识别

读取文件夹中图片并显示

python 复制代码
import cv2

# 图片的路径(同一文件夹)
image_path = 'test.jpg'

# 使用 OpenCV 读取图片
image = cv2.imread(image_path)

# 检查图片是否正确读取
if image is None:
    print(f"无法读取图片: {image_path}")
else:
    # 显示图片
    cv2.imshow('Image', image)

    # 等待用户按键后关闭窗口
    cv2.waitKey(0)
    cv2.destroyAllWindows()

打开计算机默认摄像头

python 复制代码
import cv2

def main():
    # 打开默认摄像头
    cap = cv2.VideoCapture(0)

    if not cap.isOpened():
        print("无法打开摄像头")
        return

    try:
        while True:
            # 读取一帧视频
            ret, frame = cap.read()

            if not ret:
                print("无法接收帧,退出...")
                break

            # 显示帧
            cv2.imshow('Camera', frame)

            # 按 'q' 键退出
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    finally:
        # 释放摄像头
        cap.release()
        # 关闭所有OpenCV窗口
        cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

查看摄像机的基本参数

python 复制代码
import cv2
def print_camera_parameters(cap):
    # 打印摄像头的一些常见参数
    print("帧宽度: ", cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    print("帧高度: ", cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    print("FPS (帧率): ", cap.get(cv2.CAP_PROP_FPS))
    print("曝光时间: ", cap.get(cv2.CAP_PROP_EXPOSURE))
    print("自动曝光: ", cap.get(cv2.CAP_PROP_AUTO_EXPOSURE))
    print("自动对焦是否开启: ", cap.get(cv2.CAP_PROP_AUTOFOCUS))
    # 可以根据需要添加更多参数

def main():
    # 打开默认摄像头
    cap = cv2.VideoCapture(0)

    if not cap.isOpened():
        print("无法打开摄像头")
        return

    # 打印摄像头参数
    print_camera_parameters(cap)

    # 释放摄像头
    cap.release()

if __name__ == "__main__":
    main()

查看计算机摄像头是否具有自动聚焦功能

python 复制代码
import cv2

cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("无法打开摄像头")
else:
    # 尝试设置自动对焦
    success = cap.set(cv2.CAP_PROP_AUTOFOCUS, 1)
    if success:
        print("摄像头可能具有对焦功能")
    else:
        print("摄像头可能没有对焦功能或无法通过软件控制")

    # 释放摄像头
    cap.release()

打开摄像头并启用自动对焦

python 复制代码
import cv2

def set_auto_focus(cap, enable=True):
    # 尝试设置自动对焦
    # 注意:这个方法依赖于摄像头的驱动和DirectShow的支持,可能不适用于所有摄像头
    try:
        # 使用CAP_PROP_AUTOFOCUS属性来启用或禁用自动对焦
        # 1表示启用,0表示禁用
        cap.set(cv2.CAP_PROP_AUTOFOCUS, 1 if enable else 0)
    except Exception as e:
        print(f"无法设置自动对焦: {e}")

def main():
    # 打开默认摄像头
    cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)  # 使用DirectShow后端

    if not cap.isOpened():
        print("无法打开摄像头")
        return

    # 尝试启用自动对焦
    set_auto_focus(cap, enable=True)

    try:
        while True:
            # 读取一帧视频
            ret, frame = cap.read()

            if not ret:
                print("无法接收帧,退出...")
                break

            # 显示帧
            cv2.imshow('Camera', frame)

            # 按 'q' 键退出
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    finally:
        # 释放摄像头
        cap.release()
        # 关闭所有OpenCV窗口
        cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

使用手机软件 "IP摄像头",进行连接

可参考以下案例进行环境安装
Python+OpenCV 调用手机摄像头并实现人脸识别

python 复制代码
# coding=utf-8
import cv2

 
if __name__ == '__main__':
 
    # 开启ip摄像头
    cv2.namedWindow("camera", 1)
    # 这个地址就是下面记下来的局域网IP
    video = "http://admin:admin@10.19.122.218:8081/"  # 此处@后的ipv4 地址需要修改为自己的地址
    
    cap = cv2.VideoCapture(video)
    # 检查手机相机是否打开成功
    if  not cap.isOpened():
        print("camera open failed!")
        exit()
    
    try:
        while True:
            # 读取一帧视频
            ret, frame = cap.read()

            if not ret:
                print("无法接收帧,退出...")
                break

            # 显示帧
            cv2.imshow('Camera', frame)

            # 按 'q' 键退出
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    finally:
        # 释放摄像头
        cap.release()
        # 关闭所有OpenCV窗口
        cv2.destroyAllWindows()
相关推荐
滴啦嘟啦哒1 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
全栈练习生1 小时前
AI安全与红队测试
python·ai
费曼学习法1 小时前
把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程
python·ai编程·自动化运维
鸽鸽程序猿1 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
NetX行者1 小时前
Python 工程化入门:从脚本到规范的 Python 项目结构
网络·python
MasonYyp2 小时前
asyncio并发协程
python
小小张说故事2 小时前
Python 的整数为什么永远不会溢出?拆开大整数对象,看 30 位一节的存储与运算代价
python
用户298698530142 小时前
Python 实现 Word 与 TIFF 双向转换的方案
后端·python·api
benchmark_cc2 小时前
实时行情和分钟 K 线应该如何配合使用?从信号计算到交易决策的完整分析
大数据·python·数据分析·pandas·量化交易·股票数据·quantdash
LMT流氓兔2 小时前
第四单元——第17课:让回答边生成、边显示
服务器·数据库·人工智能·python·oracle·langchain