当前位置: 首页 > news >正文

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

相关文章:

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

一、 1、先装环境 conda create -n text python3.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 n…...

PyQt4 的图片切割编辑器

一、 编辑器功能明确 允许用户加载图片、选择切割模式、对切割后的图片片段进行操作(如移动、复制、粘贴、删除等),并支持撤销和重做操作。 环境:Py2.7 PyQt 4.11 二、导入模块介绍 sys: 用于访问与 Python 解释器强相关的变…...

mac 电脑上安装adb命令

在Mac下配置android adb命令环境,配置方式如下: 1、下载并安装IDE (android studio) Android Studio官网下载链接 详细的安装连接请参考 Mac 安装Android studio 2、配置环境 在安装完成之后,将android的adb工具所在…...

Webrtc (1) - Windows 编译

最近项目上遇到webrtc wgc 的几个test case无法通过,与webrtc人员沟通后决定要自行修复一下(因为他们不想管…) 参考文档 https://webrtc.org/support/contributinghttps://chromium.googlesource.com/chromium/src//main/docs/#checking-out-and-building 以上两…...

学习数据结构(1)算法复杂度

1.数据结构和算法 (1)数据结构是计算机存储、组织数据的方式,指相互之间存在⼀种或多种特定关系的数据元素的集合 (2)算法就是定义良好的计算过程,取一个或一组的值为输入,并产生出一个或一组…...

GCC之编译(8)AR打包命令

GCC之(8)AR二进制打包命令 Author: Once Day Date: 2025年1月23日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章请查看专栏: Linux实践记录_Once-Day的博客-C…...

RocketMQ原理—4.消息读写的性能优化

大纲 1.Producer基于队列的消息分发机制 2.Producer基于Hash的有序消息分发 3.Broker如何实现高并发消息数据写入 4.RocketMQ读写队列的运作原理分析 5.Consumer拉取消息的流程原理分析 6.ConsumeQueue的随机位置读取需求分析 7.ConsumeQueue的物理存储结构设计 8.Cons…...

(Halcon)轮廓等分切割(项目分析)

目标:获取绿色圆所在位置(可用于点焊/点胶引导) 实现思路 一,相机标定板标定(如果实战用于点焊/点胶引导需要做图像畸变校正以减小误差) 相机标定 如何做一个C#仿Halcon Calibration插件-CSDN博客 二&…...

NIO 和 Netty 在 Spring Boot 中的集成与使用

Netty到底是个啥,有啥子作用 1. Netty 的本质:对 NIO 的封装 NIO 的原生问题: Java 的 NIO 提供了非阻塞 I/O 和多路复用机制,但其使用较为复杂(如 Selector、Channel、Buffer 的配置和管理)。开发者需要自…...

【更正版】梯级水光互补系统最大化可消纳电量期望短期优化调度模型

目录 1 主要内容 目标函数: 约束条件: 线性化处理: 流程示意: 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《梯级水光互补系统最大化可消纳电量期望短期优化调度模型》,构建了以最大化整体可…...

基于AnolisOS 8.6安装GmSSL 3.1.1及easy_gmssl库测试国密算法

测试环境 Virtual Box,AnolisOS-8.6-x86_64-minimal.iso,4 vCPU, 8G RAM, 60 vDisk。最小化安装。需联网。 系统环境 关闭防火墙 systemctl stop firewalld systemctl disable firewalld systemctl status firewalld selinux关闭 cat /etc/selinux/co…...

vue3 实际应用 将一个日期使用 moment.js 实现星期 今天 明天 ...

数据源 ["2025-01-23","2025-01-24","2025-01-25","2025-01-28","2025-01-26","2025-01-27" ] 后端给返回了一个这样的数据 日期数据 实际应用中实现的是这样的显示效果 日期需要这样显示的tabs 栏 我们需要…...

LLM幻觉(Hallucination)缓解技术综述与展望

LLMs 中的幻觉问题(LLM 幻觉:现象剖析、影响与应对策略)对其可靠性与实用性构成了严重威胁。幻觉现象表现为模型生成的内容与事实严重不符,在医疗、金融、法律等对准确性要求极高的关键领域,可能引发误导性后果&#x…...

Unity入门2 背景叠层 瓦片规则

切割场景 瓦片调色盘 放在Assets里面新建瓦片地图,palettes tile 瓦片 palettes调色板 上下窗口是分开的 拖进这个格子窗 瓦片太碎,要封装 装好之后,只是把瓦片放上去了,但是还没有画布,显示是这样的 no valid target 新建“…...

docker-制作镜像gcc添加jdk运行java程序

最近的项目需要使用java调用c的链接库,.OS文件,一开始准备在jdk的镜像下去安装c的环境,不过安装的内容很多,比较复杂也容易缺很多的包,经过实验,我们决定使用gcc的镜像安装jdk来正确的运行java程序。 基础镜…...

HashTable, HashMap, ConcurrentHashMap 之间的区别

一、HashTable 只是将关键方法加上了锁(synchronized关键字)。 缺点:1.如果多线程访问同一个HashTable就回直接造成锁冲突。 2.HashTable的size属性也是通过 synchronized来控制同步的,效率比较低。 3.在扩容时会涉及大量的拷贝…...

vue2和vue3组件之间的通信方式差异

Vue2 vs Vue3 组件通信方法对比 1. 父子组件通信 1.1 Props 传递 Vue2 <!-- 父组件 --> <template><child-component :message"message"></child-component> </template><script> export default {data() {return {message:…...

报错:MC1000未知的生成错误Invalid number of sections declared in PE header

报错&#xff1a;MC1000未知的生成错误Invalid number of sections declared in PE header 报错问题&#xff1a; MC1000未知的生成错误Invalid number of sections declared in PE header 开发环境&#xff1a;vs2022&#xff0c;编译C#工程时报错, 解决办法&#xff1a;重新…...

FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转

本文主要介绍如何基于FPGA实现视频的90度/270度无裁剪旋转&#xff0c;旋转效果示意图如下&#xff1a; 为了实时对比旋转效果&#xff0c;采用分屏显示进行处理&#xff0c;左边代表旋转前的视频在屏幕中的位置&#xff0c;右边代表旋转后的视频在屏幕中的位置。 分屏显示的…...

Linux(Centos 7.6)命令详解:wc

1.命令作用 打印文件的行数、单词数、字节数&#xff0c;如果指定了多个文件&#xff0c;还会打印以上三种数据的总和(Print newline, word, and byte counts for each FILE, and a total line if more than one FILE is specified) 2.命令语法 Usage: wc [OPTION]... [FIL…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...