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

一、

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_count
    
    if 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 += 1
        print(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):
            break

    print("按下 '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 += 1
            print(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 > 10000

if __name__ == "__main__":
    capture_image()

1、数据集保存在images_1

2、介绍:

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

  1. 调整曝光和增益

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

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

  1. 设置白平衡和对比度

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

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

  1. 使用自动对焦功能

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

cap.set(cv.CAP_PROP_AUTOFOCUS, 1)

  1. 减少噪声

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

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键可以退出程序。

相关推荐
爱的叹息2 分钟前
关于 传感器 的详细解析,涵盖定义、分类、工作原理、常见类型、应用领域、技术挑战及未来趋势,结合实例帮助理解其核心概念
人工智能·机器人
恶霸不委屈4 分钟前
突破精度极限!基于DeepSeek的无人机航拍图像智能校准系统技术解析
人工智能·python·无人机·deepseek
lixy57939 分钟前
深度学习之自动微分
人工智能·python·深度学习
量子位39 分钟前
飞猪 AI 意外出圈!邀请码被黄牛倒卖,分分钟搞定机酒预订,堪比专业定制团队
人工智能·llm·aigc
量子位40 分钟前
趣丸科技贾朔:AI 音乐迎来应用元年,五年内将重构产业格局|中国 AIGC 产业峰会
人工智能·aigc
量子位40 分钟前
粉笔 CTO:大模型打破教育「不可能三角」,因材施教真正成为可能|中国 AIGC 产业峰会
人工智能·aigc
神经星星42 分钟前
【TVM教程】microTVM TFLite 指南
人工智能·机器学习·编程语言
Listennnn43 分钟前
GPT,Bert类模型对比
人工智能·gpt·自然语言处理·bert
量子位1 小时前
最强视觉生成模型获马斯克连夜关注,吉卜力风格转绘不再需要 GPT 了
人工智能·llm
arbboter2 小时前
【AI插件开发】Notepad++ AI插件开发实践:实现对话窗口功能
人工智能·notepad++·notepad++插件开发·ai对话窗口·异步模型调用·实时输出渲染·动态模型切换