手把手教你玩转单目摄像头(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 cv2
 
cap = cv2.VideoCapture(0) # 0表示第一个摄像头
while(1):
    # get a frame
    ret, frame = cap.read()
    # show a frame
    cv2.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 cv2
 
cap = cv2.VideoCapture(0)
#先设置分辨率,宽:1920 长:1080
cap.set(3,1920)
cap.set(4,1080)
while(1):
    # get a frame
    ret, frame = cap.read()
    # show a frame
    cv2.imshow("capture", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

加入判断是否读到视频

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

五,录制视频

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

  • 输出的文件名,如’output.avi’
  • 编码方式FourCC码
  • 帧率FPS
  • 要保存的分辨率大小
# -*- coding: utf-8 -*-
import cv2
 
cap = 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'):
            break
    else:
        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用于监测环境条件,如天气、空气质量和自然灾害。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

golang 工程组件:grpc-gateway 环境安装+默认网关测试

grpc-gateway grpc-gateway 顾名思义是专门是grpc的网关。也是一个protobuf的编译器,是一个proto的插件。 grpc-gateway就是将http请求处理后转发到对应grpc服务上。很多浏览器,或者客户端开箱不支持grpc,只支持传统的restful API。 grpc网关…

测试用例的设计方法(全):边界值分析方法

一.方法简介 1.定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 2.与等价划分的区别 1)边界值分析不是从某等价类中随便挑…

KubeSphere一键安装部署K8S集群(单master节点)-亲测过

1. 基础环境优化 hostnamectl set-hostname master1 && bash hostnamectl set-hostname node1 && bashcat >> /etc/hosts << EOF 192.168.186.128 master1 192.168.186.129 node1 EOF#所有机器上都操作 ssh-keygen -t rsa #一路回车&#x…

Pytorch代码入门学习之分类任务(一):搭建网络框架

目录 一、网络框架介绍 二、导包 三、定义卷积神经网络 3.1 代码展示 3.2 定义网络的目的 3.3 Pytorch搭建网络 四、测试网络效果 一、网络框架介绍 网络理解&#xff1a; 将32*32大小的灰度图片&#xff08;下述的代码中输入为32*32大小的RGB彩色图片&#xff09;&…

《语音优先》智能语音技术驱动的交互界面设计与语音机器人设计(译者序)...

“言为心声,语为心境”&#xff0c;语言与对话是我们沟通与协作的重要方式。而智能语音技术是一种基于人工智能和自然语言处理技术的语音交互技术。它可以通过语音识别技术将用户的语音指令转换为文本&#xff0c;然后通过自然语言处理技术对文本进行分析和理解&#xff0c;最终…

第10期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】

【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】 1、概述2、实验环境3、 物品说明4、参考资料与自我总结5、实验过程1、创建目录2、克隆下载文件3、 拉取子目录安装和交叉编译工具链等其他工具4、添加环境变量6、将样例文件拷贝到桌面…

【Oracle】Navicat Premium 连接 Oracle的两种方式

Navicat Premium 使用版本说明 Navicat Premium 版本 11.2.16 (64-bit) 一、配置OCI 1.1 配置OCI环境变量 1.1.2 设置\高级系统设置 1.1.2 系统属性\高级\环境变量(N) 1.1.3 修改/添加系统变量 ORACLE_HOME ORACLE_HOME D:\app\root\product\12.1.0\dbhome_11.1.4 添加系…

Open3D(C++) 最小二乘拟合平面(直接求解法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 平面方程的一般表达式为: A x + B y + C

redis场用命令及其Java操作

目录 1. Redis入门 1.1 Redis简介 1.2 Redis下载与安装 1.2.1 Redis下载 1.2.2 Redis安装 1.3 Redis服务启动与停止 1.3.1 服务启动命令 1.3.2 客户端连接命令 1.3.3 修改Redis配置文件 1.3.4 Redis客户端图形工具 2. Redis数据类型 2.1 五种常用数据类型介绍 2.2 …

vue中替换全局字体

一、背景 产品说项目要拿去展会展示&#xff0c;但现在项目字体是微软雅黑&#xff0c;不支持商用&#xff0c;需要全局替换思源字体。 二、下载字体 推荐一个网址&#xff0c;好用 字体天下&#xff0c;点击跳转 下载好的文件如下&#xff1a; 三、引入字体 1、在项目…

一键自助建站系统api版系统源码

自助建站系统,一建建站系统api版,自动建站 安装推荐php7.2或7.2以下都行 可使用虚拟主机或者服务器进行搭建。 分站进入网站后台 域名/admin 初始账号123456qq.com密码123456 找到后台的网站设置 将主站域名及你在主站的通信secretId和通信secretKey填进去。 即可正常使用 通信…

测试用例的设计方法(全):等价类划分方法

一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分&#xff08;子集&#xff09;,然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类&#xff1a; 等价类是指某个输入域的…

自动驾驶,从“宠儿”走进“淘汰赛”

从“一步到位”到场景、技术降维。从拼落地路径&#xff0c;到拼雷达、算力&#xff0c;再到如今的性价比之争&#xff0c;自动驾驶似乎变得愈发“接地气”。 作者|斗斗 编辑|皮爷 出品|产业家 比起去年&#xff0c;黄文欢和张放今年显得更加忙碌。 “自动驾驶赛道&…

MYSQL表的连接方式

mysql表连接方式可以分为 1、内连接 2、外连接 3、全连接 4、交叉连接 t1表 t2表 1、内连接&#xff0c;包括自然连接&#xff0c;等值连接&#xff0c;不等值连接 1.1、自然连接&#xff0c;根据相同字段进行连接匹配…

7-1、S曲线加减速原理【51单片机控制步进电机-TB6600系列】

摘要&#xff1a;本节介绍步进电机S曲线相关内容&#xff0c;总共分四个小节讨论步进电机S曲线相关内容   根据上节内容&#xff0c;步进电机每一段的速度可以任意设置&#xff0c;但是每一段的速度都会跳变&#xff0c;当这个跳变值比较大的时候&#xff0c;电机会发生明显的…

ChatGPT AIGC 快速合并Excel工作薄 Vlookup+INDIRECT

在职场中进行数据处理,数据分析汇报与统计的过程中,经常会遇到这样的一个问题,那就是需要统计的数据源在多个文件中,多个工作薄中,如果要进行数据处理,汇总的时候会很不方便。 如果要汇总6个月的数据可能就得需要手动复制了。 再或者用其它方法来进行数据合并。 例如我…

Zabbix安装与部署

前言 Zabbix是一个开源的网络监控和系统监控解决方案&#xff0c;用于监控服务器、网络设备、应用程序和服务。它基于客户端-服务器体系结构&#xff0c;使用多种监控选项来监控不同类型的设备和应用程序。Zabbix支持数据收集、处理和存储&#xff0c;以及报警和可视化等功能。…

前沿重器[36] | ACL23-基于检索的大语言模型-报告阅读

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

(三)库存超卖案例实战——使用redis分布式锁解决“超卖”问题

前言 在上一节内容中我们介绍了如何使用mysql数据库的传统锁&#xff08;行锁、乐观锁、悲观锁&#xff09;来解决并发访问导致的“超卖问题”。虽然mysql的传统锁能够很好的解决并发访问的问题&#xff0c;但是从性能上来讲&#xff0c;mysql的表现似乎并不那么优秀&#xff…