• 手把手教你玩转单目摄像头(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循环。

    1. # -*- coding: utf-8 -*-
    2. import cv2
    3. cap = cv2.VideoCapture(0) # 0表示第一个摄像头
    4. while(1):
    5. # get a frame
    6. ret, frame = cap.read()
    7. # show a frame
    8. cv2.imshow("capture", frame)
    9. if cv2.waitKey(1) & 0xFF == ord('q'):
    10. break
    11. cap.release()
    12. cv2.destroyAllWindows()

    三,设置分辨率

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

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

    1. # -*- coding: utf-8 -*-
    2. import cv2
    3. cap = cv2.VideoCapture(0)
    4. #先设置分辨率,宽:1920 长:1080
    5. cap.set(3,1920)
    6. cap.set(4,1080)
    7. while(1):
    8. # get a frame
    9. ret, frame = cap.read()
    10. # show a frame
    11. cv2.imshow("capture", frame)
    12. if cv2.waitKey(1) & 0xFF == ord('q'):
    13. break
    14. cap.release()
    15. cv2.destroyAllWindows()

    加入判断是否读到视频

    1. # -*- coding: utf-8 -*-
    2. import cv2
    3. cap = cv2.VideoCapture(0)
    4. #先设置分辨率,宽:1920 长:1080
    5. cap.set(3,1920)
    6. cap.set(4,1080)
    7. while(1):
    8. # get a frame
    9. ret, frame = cap.read()
    10. if ret:
    11. # show a frame
    12. cv2.imshow("capture", frame)
    13. if cv2.waitKey(1) & 0xFF == ord('q'):
    14. break
    15. else:
    16. print("图像数据获取失败!!")
    17. break
    18. cap.release()
    19. cv2.destroyAllWindows()

    四,摄像头拍照

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

    1. cap.set(3,1920)

    2. cap.set(4,1080

    • 3 表示视频帧的宽度,即设置图像的宽度。
    • 4 表示视频帧的高度,即设置图像的高度。
    1. # -*- coding: utf-8 -*-
    2. import cv2
    3. cap = cv2.VideoCapture(0)
    4. #先设置分辨率,宽:1920 长:1080
    5. cap.set(3,1920)
    6. cap.set(4,1080)
    7. # 图像计数 从1开始
    8. img_count = 1
    9. while(1):
    10. # get a frame
    11. ret, frame = cap.read()
    12. if ret:
    13. # show a frame
    14. cv2.imshow("capture", frame)
    15. # 等待按键事件发生 等待1ms
    16. key = cv2.waitKey(1)
    17. if key == ord('q'):
    18. # 如果按键为q 代表quit 退出程序
    19. print("程序正常退出..")
    20. break
    21. elif key == ord('s'):
    22. ## 如果s键按下,则进行图片保存
    23. # 写入图片 并命名图片为 图片序号.png
    24. cv2.imwrite("{}.png".format(img_count), frame)
    25. print("保存图片,名字为 {}.png".format(img_count))
    26. # 图片编号计数自增1
    27. img_count += 1
    28. else:
    29. print("图像数据获取失败!!")
    30. break
    31. cap.release()
    32. cv2.destroyAllWindows()

    五,录制视频

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

    • 输出的文件名,如’output.avi’
    • 编码方式FourCC码
    • 帧率FPS
    • 要保存的分辨率大小
    1. # -*- coding: utf-8 -*-
    2. import cv2
    3. cap = cv2.VideoCapture(0)
    4. # 定义编码方式并创建VideoWriter对象
    5. fourcc = cv2.VideoWriter_fourcc(*'MJPG')
    6. outfile = cv2.VideoWriter('output.avi', fourcc, 25., (640, 480))
    7. while(cap.isOpened()):
    8. ret, frame = cap.read()
    9. if ret:
    10. outfile.write(frame) # 写入文件
    11. cv2.imshow('frame', frame)
    12. if cv2.waitKey(1) == ord('q'):
    13. break
    14. else:
    15. 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用于监测环境条件,如天气、空气质量和自然灾害。

  • 相关阅读:
    24 行为型模式-访问者模式
    深度学习优化算法之梯度下降(泰勒展开式推导)
    数字IC秋招手撕代码(十)计算最小公倍数与最大公约数
    磨金石教育插画干货分享|日本插画为什么独树一帜,那么受欢迎
    多元回归分析 | RF随机森林多输入单输出预测(Matlab完整程序)
    多种方案教你彻底解决mac npm install -g后仍然不行怎么办sudo: xxx: command not found
    【Java SE】this详解
    Java中Arrays类中的数组操作方法详解
    Microsoft Edge浏览器不兼容解决办法
    npm run 串行执行时,如何给某个命令动态传参数
  • 原文地址:https://blog.csdn.net/qq_53545309/article/details/134043522