ubuntu电脑调用摄像头拍摄照片

server/2025/1/22 10:55:50/

一、

1、先装环境

conda create -n text python==3.8 -y
conda activate text

2、

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

1、连接摄像头拍摄收集数据集

capture_image5.py       

import cv2 as cv
import os
import datetime
import numpy as np  # 确保这一行在文件顶部def create_directory_if_not_exists(directory):if not os.path.exists(directory):os.makedirs(directory)# 鼠标点击事件的回调函数
def mouse_click(event, x, y, flags, param):global frame, image_dir, save_countif event == cv.EVENT_LBUTTONDOWN:# 当鼠标左键点击时保存图片,使用PNG格式保存以确保无损timestamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")image_filename = os.path.join(image_dir, f"image_{timestamp}.png")cv.imwrite(image_filename, frame)  # 使用默认参数保存PNG,确保无损print(f"图片已保存为 {image_filename}")save_count += 1print(f"已保存图片总数: {save_count}")def capture_image():global frame, image_dir, save_count# 初始化保存计数器save_count = 0# 创建存放图片的目录image_dir = 'images_1'create_directory_if_not_exists(image_dir)# 尝试打开默认摄像头cap = cv.VideoCapture(2)  # 根据实际情况选择摄像头编号if not cap.isOpened():print("无法打开摄像头")return# 设置摄像头属性cap.set(cv.CAP_PROP_FRAME_WIDTH, 1920)cap.set(cv.CAP_PROP_FRAME_HEIGHT, 1080)cap.set(cv.CAP_PROP_FPS, 30)cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc('M', 'J', 'P', 'G'))# 尝试调整图像质量相关的属性cap.set(cv.CAP_PROP_EXPOSURE, -6)           # 调整曝光时间cap.set(cv.CAP_PROP_GAIN, 0)                # 固定增益cap.set(cv.CAP_PROP_WHITE_BALANCE_BLUE_U, 5000)  # 白平衡cap.set(cv.CAP_PROP_CONTRAST, 0.5)          # 对比度cap.set(cv.CAP_PROP_SHARPNESS, 25)          # 锐度cap.set(cv.CAP_PROP_AUTOFOCUS, 1)           # 自动对焦# 检查对焦状态while True:ret, frame = cap.read()if not ret:print("无法获取帧")break# 检查对焦是否完成if check_focus(frame):breakprint("按下 's' 键拍照,点击鼠标左键保存图片,或按 'q' 键退出")# 设置鼠标回调函数cv.namedWindow('Press "s" to capture an image')cv.setMouseCallback('Press "s" to capture an image', mouse_click)while True:ret, frame = cap.read()if not ret:print("无法获取帧")break# 显示视频流cv.imshow('Press "s" to capture an image', frame)key = cv.waitKey(1) & 0xFF# 按下 's' 键保存图片if key == ord('s'):timestamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")image_filename = os.path.join(image_dir, f"image_{timestamp}.png")cv.imwrite(image_filename, frame)  # 使用默认参数保存PNG,确保无损print(f"图片已保存为 {image_filename}")save_count += 1print(f"已保存图片总数: {save_count}")elif key == ord('q'):  # 按下 'q' 键退出print("退出程序")break# 释放资源cap.release()cv.destroyAllWindows()def check_focus(frame):# 使用边缘检测来检查对焦情况gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)edges = cv.Canny(gray, 50, 150)edge_count = np.sum(edges > 0)# 如果边缘数量足够多,则认为对焦完成return edge_count > 10000if __name__ == "__main__":capture_image()

1、数据集保存在images_1

2、介绍:

在代码中设置了四字符编码(FOURCC),使用了MJPG压缩格式:

3. 调整曝光和增益
一些摄像头允许通过OpenCV调整曝光时间和增益来改善图像质量:

cap.set(cv.CAP_PROP_EXPOSURE, -6) # 根据需要调整值 cap.set(cv.CAP_PROP_GAIN, 0) # 固定增益

4. 设置白平衡和对比度
适当调整白平衡和对比度也能显著提高图像清晰度:

cap.set(cv.CAP_PROP_WHITE_BALANCE_BLUE_U, 5000) # 示例值 cap.set(cv.CAP_PROP_CONTRAST, 0.5) # 对比度设置为50%

5. 使用自动对焦功能
如果摄像头支持自动对焦,请确保启用了此功能。对于某些摄像头,可以通过以下方式启用自动对焦:

cap.set(cv.CAP_PROP_AUTOFOCUS, 1)

6. 减少噪声
高分辨率图像有时会引入更多噪声。可以尝试减少噪声水平:

cap.set(cv.CAP_PROP_SHARPNESS, 25) # 锐度设置

关键点解释
全局变量:frame 和 image_dir被声明为全局变量,以便它们可以在mouse_click函数中访问。
鼠标回调函数:mouse_click函数监听鼠标事件,当检测到左键点击(cv.EVENT_LBUTTONDOWN)时,保存当前帧。
窗口名称一致:确保设置鼠标回调和显示图像的窗口名称一致,这里是'Press "s" to capture an image'。
测试与运行
当你运行这个脚本时,它会打开摄像头并显示实时视频流。此时,你可以通过以下方式保存图像:

按键操作:按下s键可以保存一张图片。
鼠标操作:点击鼠标左键也可以保存一张图片。
退出程序:按下q键可以退出程序。


http://www.ppmy.cn/server/160433.html

相关文章

【数据库】MySQL架构探秘——select语句与update语句的执行流程

目录 1.select语句的执行流程 1.1.连接层 1.2.缓存层 1.3.解析层 1.4.优化器 1.5.执行器与存储引擎 1.6.MySQL架构总结 2.update语句的执行流程 2.1.buffer pool缓冲区 2.2.redo log日志 2.3.undo log日志 2.4.bin log日志 2.5.总结update语句执行流程 1.select语…

果蝇优化算法的改进算法有哪些

果蝇优化算法(Fruit Fly Optimization Algorithm, FOA)是一种基于果蝇觅食行为的仿生学原理而提出的新兴群体智能优化算法。它通过模拟果蝇利用敏锐的嗅觉和视觉进行捕食的过程,实现对解空间的群体迭代搜索。然而,原始的果蝇优化算…

OpenCV相机标定与3D重建(61)处理未校准的立体图像对函数stereoRectifyUncalibrated()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 为未校准的立体相机计算一个校正变换。 cv::stereoRectifyUncalibrated 是 OpenCV 库中的一个函数,用于处理未校准的立体图像对。该函…

若依前后端分离项目部署(使用docker)

文章目录 一、搭建后端1.1 搭建流程:1.2 后端零件:1.2.1 mysql容器创建:1.2.2 redis容器创建:1.2.3 Dockerfile内容:1.2.4 构建项目镜像:1.2.5 创建后端容器: 二、前端搭建:2.1 搭建流程&#x…

《多模态语言模型的局限性与生态系统发展现状分析》

1. 多模态语言模型的主要局限性 推理能力问题 复杂推理任务表现不稳定图像理解深度差异大推理过程存在逻辑跳跃 技术实现挑战 视觉特征与语言理解的融合不完善训练数据和方法有限跨模态理解算法需优化 2. 生态系统的不成熟表现 评测标准问题 缺乏标准化评测框架性能评估方法…

Scade 表达式 - 使用索引的迭代器

Scade 表达式中的 map, fold, mapfold,会对输入数组参数中的元素逐个作处理,不需要数组元素的索引信息。若在处理数组元素时,需要数组元素相应的索引信息,则可使用迭代器算子 mapi, foldi, mapfoldi。 mapi 算子 mapi 算子的行为…

T-SQL语言的数据库编程

T-SQL语言的数据库编程 1. 引言 在信息化迅速发展的今天,数据库已经成为数据管理和使用的重要工具。其中,T-SQL(Transact-SQL)作为微软SQL Server的扩展SQL语言,不仅用于数据查询和管理,还能够进行复杂的…

电脑未能成功安装设备驱动程序怎么办 几种有效修复方法

当电脑未能成功安装设备驱动程序时,可以尝试以下几种有效修复方法: 一、检查设备连接与兼容性 重新插拔设备:确保设备已正确且牢固地插入电脑的接口中。如果是USB设备,可以尝试插到主机背部的接口,以确保供电稳定。更…