Python+opencv打开摄像头,使用按键拍照

这段代码展示了如何使用OpenCV库在Python中打开摄像头,实时捕获视频帧,并在按下's'键时保存当前帧为.jpg格式的图片。程序会持续显示摄像头画面,直到用户按下'q'键退出。主要涉及计算机视觉和图像处理的基础操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

曾经部分参考过某篇文章,但是太久了找不到出处了。

import cv2

cap = cv2.VideoCapture(1)  # 创建一个 VideoCapture 对象,1为外接的USB摄像头
flag = 1  # 设置一个标志,用来输出视频信息
num = 1  # 递增,用来保存文件名
while (cap.isOpened()):  # 循环读取每一帧
    ret_flag, Vshow = cap.read()  # 返回两个参数,第一个是bool是否正常打开,第二个是照片数组,如果只设置一个则变成一个tuple包含bool和图片
    cv2.imshow("Capture_Test", Vshow)  # 窗口显示,显示名为 Capture_Test
    k = cv2.waitKey(1) & 0xFF  # 每帧数据延时 1ms,延时不能为 0,否则读取的结果会是静态帧
    if k == ord('s'):  # 若检测到按键 ‘s’,打印字符串
        cv2.imwrite("./" + str(num) + ".jpg", Vshow)
        print(cap.get(3))  # 得到长宽
        print(cap.get(4))
        print("success to save" + str(num) + ".jpg")
        print("-------------------------")
        num += 1
    elif k == ord('q'):  # 若检测到按键 ‘q’,退出
        break
cap.release()  # 释放摄像头
cv2.destroyAllWindows()  # 删除建立的全部窗口

在这里插入图片描述
在这里插入图片描述

### 使用PythonOpenCV实现连续图像采集 为了实现连续图像采集,可以创建一个循环来不断读取摄像头的数据并保存每一帧作为单独的图像文件。下面是一个完整的例子,展示了如何使用 `cv2.VideoCapture` 来访问默认摄像设备,并通过无限循环捕获视频流中的每一帧。 #### 初始化摄像头对象 首先初始化摄像头对象,通常0表示系统的第一个可用摄像头: ```python import cv2 cap = cv2.VideoCapture(0) # 打开默认相机 if not cap.isOpened(): print("无法打开摄像头") exit() ``` #### 设置分辨率和其他参数 (可选) 如果想要调整捕捉到的画面大小或其他属性,可以通过设置相应的属性值完成: ```python # 设定分辨率为1920x1080, 可能会因为硬件限制而失败 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)[^1] cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) # 获取实际设定后的宽度高度 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) print(f'Camera resolution set to {width}x{height}') ``` #### 进入抓拍模式 进入一个while True循环,在每次迭代中读取一帧画面,并将其显示出来供查看。按下特定按键(比如 'q' 键)退出程序;按其他键如'spacebar'(空格键),则保存当前帧至本地磁盘上指定位置。 ```python counter = 0 while True: ret, frame = cap.read() # 捕捉单帧 if not ret: break cv2.imshow('frame', frame) # 显示该帧 key = cv2.waitKey(1) if key & 0xFF == ord('q'): # 如果检测到 q 键被按下,则停止录制 break elif key % 256 == 32: # 如果检测到 space bar 被按下,则保存图片 img_name = f"image_{counter}.png" cv2.imwrite(img_name, frame) print("{} written!".format(img_name)) counter += 1 cap.release() # 关闭摄像头资源 cv2.destroyAllWindows() # 清除所有窗口 ``` 此脚本实现了基本的功能需求——即能够持续地从连接的摄像头获取实时影像,并允许用户选择性地存储这些影象副本。对于更复杂的应用场景,可以根据具体的需求进一步扩展上述代码逻辑[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值