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

摄像头拍摄照片

1、点击摄像头拍摄照片

保存在image_1文件夹下

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(0)  # 根据实际情况选择摄像头编号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()

2、查看坐标系

import cv2 as cv
import os
import datetime# 全局变量,用于存储鼠标坐标
mouse_x = 0
mouse_y = 0# 鼠标回调函数
def mouse_callback(event, x, y, flags, param):global mouse_x, mouse_yif event == cv.EVENT_MOUSEMOVE:mouse_x, mouse_y = x, y# 创建窗口并绑定鼠标回调
cv.namedWindow('Camera')
cv.setMouseCallback('Camera', mouse_callback)# 打开摄像头(参数0表示默认摄像头)
cap = cv.VideoCapture(0)if not cap.isOpened():print("无法打开摄像头")exit()# 设置摄像头属性
# cap.set(cv.CAP_PROP_FRAME_WIDTH, 1920)
# cap.set(cv.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv.CAP_PROP_FRAME_HEIGHT, 720)
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)           # 自动对焦try:while True:# 读取帧ret, frame = cap.read()if not ret:print("无法读取帧")break# 获取当前摄像头分辨率width = cap.get(cv.CAP_PROP_FRAME_WIDTH)height = cap.get(cv.CAP_PROP_FRAME_HEIGHT)resolution_text = f"Resolution: {int(width)}x{int(height)}"# 在画面左上角显示分辨率cv.putText(frame, resolution_text, (10, 30),cv.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)# 显示鼠标坐标(右下角)mouse_text = f"({mouse_x}, {mouse_y})"cv.putText(frame, mouse_text, (mouse_x + 10, mouse_y + 10),cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)# 显示画面cv.imshow('Camera', frame)# 按 q 键退出if cv.waitKey(1) == ord('q'):breakfinally:# 释放资源cap.release()cv.destroyAllWindows()

http://www.dtcms.com/a/541265.html

相关文章:

  • UVa 1620 Lazy Susan
  • 中国工程建筑门户网站官网房产网签
  • RabbitMQ事务机制详解
  • 网站开发人员的水平wordpress听说对百度不友好
  • 中国网站空间西安营销策划推广公司
  • 【AI工具】dify智能体-Kimi-K2+Mermaid ,一键生成系统架构图
  • 如何利用代理 IP 构建分布式爬虫系统架构?
  • 拿别的公司名字做网站凡科网站怎么修改昨天做的网站
  • Gin 框架中路由的底层实现原理
  • 公司网站开发费进什么费用利用小米路由器mini做网站
  • h5游戏免费下载:飞机炸弹?
  • 【c++ qt】QtConcurrent与QFutureWatcher:实现高效异步计算
  • puppeteer生成PDF实践
  • Windows桌面添加我的电脑
  • 响应式网站和非响应式网站的区别wordpress 兼容php7
  • 03.OpenStack界面管理
  • 深度学习与大模型完全指南:从神经网络基础到模型训练实战
  • 神经网络发展【深度学习】
  • 类似红盟的网站怎么做阿里巴巴官网登录
  • 自创字 网站php开源网站管理系统
  • Linux Shell 中静默登录另一台机器并执行SQL文件
  • Python 实战:Web 漏洞 Python POC 代码及原理详解(1)
  • 前端学习之八股和算法
  • dataonline.vn免费Web容器的使用
  • 进制转换器可视化
  • 第六部分:VTK进阶(第176章 高速等值面vtkFlyingEdges3D)
  • VSCode + Copilot
  • 网站后台管理系统权限个人品牌网站设计
  • 推送报错403怎么办?vscode推送项目到github
  • 【Linux专栏】多层变量的重定向赋值