手把手教你玩转单目摄像头(OpenCv+Python)

目录

​编辑

一,单目应用前景

二,打开摄像头

三,设置分辨率

四,摄像头拍照

五,录制视频

六,单目结合OpenCV的实际应用


一,单目应用前景

单目视觉(monocular vision)在深度学习的应用非常广泛,它是计算机视觉和机器学习领域的热门研究方向之一。以下是一些单目视觉在深度学习中的主要应用:

  1. 深度估计:单目深度估计是使用单个摄像头来推断场景中物体的深度信息。深度学习模型,如卷积神经网络(CNN)和递归神经网络(RNN),已经在这一领域取得了显著的进展。这些模型可以根据输入图像来预测每个像素的深度值,从而实现立体视觉的效果。

  2. SLAM(Simultaneous Localization and Mapping):单目SLAM是指使用单个摄像头来同时定位相机的位置并构建场景的地图。深度学习可以用于改进SLAM中的视觉特征提取、运动估计和地图构建等关键步骤。

  3. 目标检测和跟踪:单目摄像头可用于检测和跟踪场景中的对象。深度学习模型,如YOLO(You Only Look Once)和Faster R-CNN,已广泛用于目标检测和跟踪任务。这对自动驾驶、智能监控和无人机等领域尤其重要。

  4. 语义分割:单目图像语义分割是指将图像中的每个像素标记为属于特定类别的一种任务。深度学习模型可以实现高精度的图像分割,用于识别道路、行人、车辆等。

  5. 人体姿态估计:单目摄像头可以用于估计场景中人体的姿态,包括关节位置和骨骼结构。深度学习模型在姿态估计中取得了很大的进展,可用于体育分析、虚拟现实和人机交互。

  6. 图像生成和超分辨率:深度学习模型,如生成对抗网络(GAN)和卷积神经网络(CNN),可以用于图像生成和超分辨率。这些技术可用于图像修复、风格转换和增强图像质量。

  7. 自动驾驶:单目视觉在自动驾驶领域中起着关键作用,它用于检测道路、车辆、行人和障碍物,并用于自动驾驶决策和路径规划。

  8. 虚拟现实:单目视觉用于虚拟现实应用,例如头显设备中的头部追踪、手部追踪和环境重建。

二,打开摄像头

OpenCV有VideoCapture()函数,能用来定义“摄像头”对象,0表示第一个摄像头(一般是电脑内置的摄像头);如果有两个摄像头,第二个摄像头则对应VideoCapture(1)。

在while循环中使用“摄像头对象”的read()函数一帧一帧地读取摄像头画面数据。

imshow函数是显示摄像头的某帧画面;cv2.waitKey(1)是等待1ms,如果期间检测到了键盘输入q,则退出while循环。

# -*- coding: utf-8 -*-
import cv2cap = cv2.VideoCapture(0) # 0表示第一个摄像头
while(1):# get a frameret, frame = cap.read()# show a framecv2.imshow("capture", frame)if cv2.waitKey(1) & 0xFF == ord('q'):break
cap.release()
cv2.destroyAllWindows()

三,设置分辨率

有时需要指定摄像头的分辨率,比如1920*1080;

cap.set(3,1920) 设置帧的宽度为1920。cap.set(4,1080) 设置帧的长度为1080。

# -*- coding: utf-8 -*-
import cv2cap = cv2.VideoCapture(0)
#先设置分辨率,宽:1920 长:1080
cap.set(3,1920)
cap.set(4,1080)
while(1):# get a frameret, frame = cap.read()# show a framecv2.imshow("capture", frame)if cv2.waitKey(1) & 0xFF == ord('q'):break
cap.release()
cv2.destroyAllWindows()

加入判断是否读到视频

# -*- coding: utf-8 -*-
import cv2cap = cv2.VideoCapture(0)
#先设置分辨率,宽:1920 长:1080
cap.set(3,1920)
cap.set(4,1080)
while(1):# get a frameret, frame = cap.read()if ret:# show a framecv2.imshow("capture", frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakelse:print("图像数据获取失败!!")break
cap.release()
cv2.destroyAllWindows()

四,摄像头拍照

拍照 = 保存图片,使用 cv2.imwrite 把当前摄像头的帧 数据写进去,保存为图片的形式;如果s键按下,则进行图片保存;

  1. cap.set(3,1920)

  2. cap.set(4,1080

  • 3 表示视频帧的宽度,即设置图像的宽度。
  • 4 表示视频帧的高度,即设置图像的高度。
# -*- coding: utf-8 -*-
import cv2cap = cv2.VideoCapture(0)
#先设置分辨率,宽:1920 长:1080
cap.set(3,1920)
cap.set(4,1080)
# 图像计数 从1开始
img_count = 1while(1):# get a frameret, frame = cap.read()if ret:# show a framecv2.imshow("capture", frame)# 等待按键事件发生 等待1mskey = cv2.waitKey(1)if key == ord('q'):# 如果按键为q 代表quit 退出程序print("程序正常退出..")breakelif key == ord('s'):## 如果s键按下,则进行图片保存# 写入图片 并命名图片为 图片序号.pngcv2.imwrite("{}.png".format(img_count), frame)print("保存图片,名字为  {}.png".format(img_count))# 图片编号计数自增1img_count += 1else:print("图像数据获取失败!!")break
cap.release()
cv2.destroyAllWindows()

五,录制视频

保存图片使用的是cv2.imwrite(),要保存视频,需要创建一个VideoWriter对象,需要传入四个参数。

  • 输出的文件名,如’output.avi’
  • 编码方式FourCC码
  • 帧率FPS
  • 要保存的分辨率大小
# -*- coding: utf-8 -*-
import cv2cap = cv2.VideoCapture(0)
# 定义编码方式并创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
outfile = cv2.VideoWriter('output.avi', fourcc, 25., (640, 480))while(cap.isOpened()):ret, frame = cap.read()if ret:outfile.write(frame)  # 写入文件cv2.imshow('frame', frame)if cv2.waitKey(1) == ord('q'):breakelse:break

fourcc = cv2.VideoWriter_fourcc(*'MJPG') 定义视频编码方式,这里使用MJPG编码器。VideoWriter_fourcc 函数用于指定视频编码器,这是为了确保视频能够正确保存到文件中。

outfile = cv2.VideoWriter('output.avi', fourcc, 25., (640, 480)) 创建一个名为'output.avi'的视频文件写入对象,指定编码方式(MJPG),帧速率为25帧每秒,以及每帧的分辨率为(640, 480)像素。

使用 cv2.waitKey(1) 等待键盘输入。如果用户按下 'q' 键,就会退出循环。

六,单目结合OpenCV的实际应用

  1. 图像捕获和显示:使用单目摄像头捕获实时图像,然后使用OpenCV显示图像。这是最基本的用途,可用于监视、实时图像展示和调试。

  2. 图像处理和滤波:OpenCV提供了各种图像处理和滤波技术,例如模糊、边缘检测、颜色空间转换等。这些技术可用于图像增强、噪声去除和特征提取。

  3. 目标检测和跟踪:OpenCV包括用于目标检测和跟踪的功能,可以用于监控、自动驾驶、安防和机器人导航。

  4. 人脸检测和识别:OpenCV提供了人脸检测和识别的功能,用于各种应用,包括人脸解锁、人脸识别门禁系统和表情分析。

  5. 文档扫描和OCR:可以使用单目摄像头拍摄文档,然后使用OpenCV进行文档扫描和光学字符识别(OCR),以将文本从图像中提取出来。

  6. 虚拟现实和增强现实:单目摄像头用于虚拟现实和增强现实应用,包括头部追踪、手部追踪、物体识别和环境重建。

  7. 深度学习:OpenCV集成了深度学习库,可用于图像分类、对象识别、图像分割和深度估计等任务。单目摄像头结合深度学习可用于各种视觉任务。

  8. 机器视觉:单目摄像头结合OpenCV用于机器视觉任务,如零件检测、装配线检测、质量控制和工业自动化。

  9. 自动驾驶:单目摄像头用于自动驾驶系统,包括车道保持、交通标志检测和障碍物检测。

  10. 医疗影像分析:单目摄像头用于医学影像分析,包括X射线图像、MRI图像和皮肤病变检测。

  11. 环境监测:单目摄像头结合OpenCV用于监测环境条件,如天气、空气质量和自然灾害。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android MQTT连接阿里云使用Json解析数据

Android Studio 连接阿里云订阅主题然后使用JSON解析数据非常好用 导入MQTT的JAR包1、在项目中添加依赖然后使用Studio 去下载库2、直接下载JAR包,然后作为库进行导入 环境验证:给程序进行联网权限XML布局文件效果如下: MainActitive.java 主…

JavaScript进阶 第四天笔记——深浅拷贝、this绑定、防抖节流

JavaScript 进阶 - 第4天 深浅拷贝 浅拷贝 首先浅拷贝和深拷贝只针对引用类型 浅拷贝:拷贝的是地址 常见方法: 拷贝对象:Object.assgin() / 展开运算符 {…obj} 拷贝对象拷贝数组:Array.prototype.concat() 或者 […arr] 如…

k8s-----18、Ingress(对外服务)

Ingress 1、Ingress概念2、 pod和ingress的关系3、 Ingress的工作流程4、 使用步骤5、对外暴露应用实战5.1 创建nginx应用,对外暴露端口使用NodePort5.2 部署ingress controller5.3 创建ingress规则5.4 访问 1、Ingress概念 k8s 对外暴露服务(service&am…

day50 --动态规划9

198.打家劫舍 213.打家劫舍II 337.打家劫舍III 第一题:打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一…

堆(二叉树,带图详解)

一.堆 1.堆的概念 2.堆的存储方式 逻辑结构 物理结构 2.堆的插入问题 3.堆的基本实现(代码)(以小堆为例) 1.堆的初始化 2. 向上调整 3.插入结点 4. 交换函数、堆的打印 5.向下调整 6.删除根节点并调整成小根堆 7.获取堆…

3D模型格式转换工具HOOPS Exchange助力SIMCON搭建注塑项目

行业:设计与制造 / 注塑成型 / 模拟 挑战:注塑成型商面临着以高效的方式为客户生产零件的挑战。需要大量的试验才能生产出适合的零件,同时模具需要进行多次物理修改,每次修改周期最长需要四个星期,成本高达四到五位数…

第1章 Java、IDEA环境部署与配置

JavaEE简介与IDE环境部署 课程目录 JavaEE简介JDK环境部署IntelliJ IDEA环境部署 JavaEE简介 1. JavaEE是什么? Java EE(Java Platform,Enterprise Edition)是sun公司(2009年4月20日甲骨文将其收购)推…

Java反射获取内部类方法

Java反射获取内部类方法 结论一、案例准备二、测试方法:使用反射获取类的成员内部类和方法具体操作具体操作(使用getDeclaredClasses) 结论 Java 通过反射可以获得内部类,包括内部类属性信息和方法。 一、案例准备 创建了一个类…

Python自动处理pptx:新建、另存、添加幻灯片、添加标题、插入文本图片图形、提取文本

Python-pptx库是一个用于创建、更新和读取Microsoft PowerPoint .pptx 文件的Python库。它允许我们使用Python脚本自动化PowerPoint文件的创建、更新和读取操作,是一个非常方便自动化处理PPTX的工具。 安装 pip install python-pptx创建 from pptx import Prese…

【Note】链式存储结构

设计不同的结点结构,可以构成不同的链式存储结构。常用的有:二叉链表、三叉链表、线索链表(用空链域存放指向前驱或后继的线索)。 二叉链表存储 VS 一般二叉树 二叉链表 VS 二叉树 知识点: 一个二叉链表由根指针root…

vue3+vite在线预览pdf

效果图 代码 <template><div class"pdf-preview"><div class"pdf-wrap"><vue-pdf-embed :source"state.source" :style"scale" class"vue-pdf-embed" :page"state.pageNum" /></div…

Python:实现日历到excel文档

背景 日历是一种常见的工具,用于记录事件和显示日期。在编程中,可以使用Python编码来制作日历。 Python提供了一些内置的模块和函数,使得制作日历变得更加简单。 在本文,我们将探讨如何使用Python制作日历,并将日历输出到excel文档中。 效果展示 实现 在代码中会用到cale…

spring常见问题汇总

1. 什么是spring? Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务 逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack&#xff08;一站式&#xff09;轻量级开源框架&#xff0c; 为开…

25.2 MySQL 运算符

1. 伪表 在MySQL中, DUAL是一个特殊的单行, 单列的虚拟表, 主要用于在SELECT语句中计算表达式或执行函数, 而不需要从实际的数据表中检索数据. 使用DUAL的原因主要有以下几点:* 1. 简化计算: 通过在SELECT语句中使用DUAL, 可以方便地计算表达式或执行函数, 而无需创建临时表或…

thinkphp5使用phpmail发送qq邮件

目录 1、使用composer 工具安装&#xff0c;在tp5根目录下执行 2、封装发送邮件方法 3、控制器中调用 4、运行后结果 1、使用composer 工具安装&#xff0c;在tp5根目录下执行 composer require phpmailer/phpmailer 安装成功后显示下面目录 2、封装发送邮件方法 function…

linux中好玩的数据流定向和管道命令一

知识点复习&#xff1a; 什么是数据流定向&#xff0c;个人理解就是将 一些结果信息不打印在屏幕上&#xff0c;而是定位在某一个文件里面 ll /wdf > file 会覆盖file的原内容 ll /wdf >> 会追加到原文件后面 比如在自己的目录新建1.TXT&#xff0c; 2.txt ll /…

echarts 仪表盘统计图

<!--仪表盘统计图--><div class"ybptx" ref"btryzb"></div>mounted(){this.getBtData();}getBtData() {let chart this.$echarts.init(this.$refs.btryzb);let data_czzf this.cznlzhpj.czzfs;let option {series: [{name: 内层数据刻…

asp.net网球馆计费管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net网球馆计费管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 aspnet网球馆计费管理系统1 二、…

Vue 项目进行 SEO 优化

SSR 服务器渲染 服务端渲染, 在服务端 html 页面节点, 已经解析创建完了, 浏览器直接拿到的是解析完成的页面解构 关于服务器渲染&#xff1a;Vue 官网介绍 &#xff0c;对 Vue 版本有要求&#xff0c;对服务器也有一定要求&#xff0c;需要支持 nodejs 环境。 优势: 更好的 …

01. 板载硬件资源和开发环境

一、板载硬件资源 STM32F4VGT6-DISCOVERY硬件资源如下&#xff1a; (1). STM32F407VGT6微控制器有1M的FLASH存储器&#xff0c;192K的RAM&#xff0c;LQFP100封装 (2). 板上的ST-LINK_V2可以使用选择的方式把套件切换成一个独立的ST-LINK/V2来 使用&#xff08;可以使用SWD…