一步一步学OAK之五:通过OAK相机实现边缘检测

本文档详细介绍了如何通过OAK相机和DepthAI库进行边缘检测,涵盖了从创建文件、安装依赖、导入包到设置相机属性、建立链接关系、运行程序的全过程。教程中使用了Sobel滤波器对左侧、右侧和RGB摄像头的图像进行边缘检测,并通过键盘输入切换卷积核。边缘检测是计算机视觉的重要技术,用于识别图像中的轮廓和边界,此教程为实现这一功能提供了清晰的步骤指导。
摘要由CSDN通过智能技术生成

边缘检测简介

边缘检测是计算机视觉和图像处理中的一种基本技术,用于识别图像中物体和图像中不同区域之间的边界或轮廓。边缘是图像中具有明显灰度或强度变化的区域,通常表示不同物体、纹理或形状之间的边界。

边缘检测算法通过分析图像中像素的灰度值或强度变化情况,以找到这些变化的区域。常见的边缘检测算法包括Sobel算子、Canny边缘检测和Laplacian算子等。

边缘检测的应用广泛,例如在目标识别、图像分割、物体测量、图像配准和图像压缩等领域都有重要作用。通过检测图像中的边缘,可以提取出物体的形状和结构信息,进而进行进一步的分析和处理。

这里我们实现对左边、右边和RGB摄像头三个不同的输入进行边缘检测。使用了硬件加速的Sobel滤波器3x3。可以通过按键1和2来改变Sobel滤波器的参数。

Setup 1: 创建文件

  • 创建新建5-edge-detector文件夹
  • 用vscode打开该文件夹
  • 新建一个main.py 文件

Setup 2: 安装依赖

安装依赖前需要先创建和激活虚拟环境,我这里已经创建了虚拟环境OAKenv,在终端中输入cd…退回到OAKenv的根目录,输入 OAKenv\Scripts\activate激活虚拟环境
安装pip依赖项:

pip install numpy opencv-python depthai blobconverter --user

Setup 3: 导入需要的包

在main.py中导入项目需要的包

import cv2
import depthai as dai
import numpy as np

这里导入了numpy库;

NumPy是一个Python库,用于进行科学计算和数据分析。它提供了高性能的多维数组对象(ndarray),以及一系列的函数用于操作这些数组。NumPy的主要功能包括:

  1. 多维数组:NumPy的核心是ndarray对象,它是一个具有固定大小的数组,可以容纳相同类型的元素。这使得NumPy数组比Python原生的列表更高效,更适合进行大规模数据处理和数值计算。

  2. 广播(Broadcasting):NumPy允许不同形状的数组执行相同的操作,而无需复制数据。通过广播,可以有效地对数组执行元素级别的数学运算。

  3. 数学和逻辑操作:NumPy提供了许多内置的数学函数(如sin,cos,exp等)和逻辑操作函数(如all,any,logical_and等),可以轻松地对数组进行操作。

  4. 线性代数运算:NumPy包含了一组用于执行线性代数运算的函数,如矩阵乘法、求解线性方程组等。

  5. 数组操作:NumPy提供了丰富的数组操作函数,如排序、切片、索引、重新形状等,以及用于数组合并和拆分的函数。

  6. 文件操作:NumPy可以读取和写入数组数据到磁盘中的文件,支持多种文件格式(如文本文件、CSV文件、二进制文件等)。

Setup 4: 创建pipeline

pipeline = dai.Pipeline()

Setup 5: 创建节点

创建相机节点

camRgb = pipeline.create(dai.node.ColorCamera)
monoLeft = pipeline.createMonoCamera()
monoRight = pipeline.createMonoCamera()
  1. camRgb = pipeline.create(dai.node.ColorCamera):创建一个彩色相机节点(ColorCamera),用于捕获RGB图像。
  2. monoLeft = pipeline.createMonoCamera():创建一个单通道相机节点(MonoCamera),用于捕获左侧单色图像。
  3. monoRight = pipeline.createMonoCamera():创建一个单通道相机节点(MonoCamera),用于捕获右侧单色图像。

这三个节点将在管道中以并行方式工作,可以同时捕获彩色和单色图像。

创建边缘检测节点

edgeDetectorLeft = pipeline.createEdgeDetector()
edgeDetectorRight = pipeline.createEdgeDetector()
edgeDetectorRgb = pipeline.createEdgeDetector()

这段代码在pipeline中创建三个边缘检测节点。

  1. edgeDetectorLeft = pipeline.createEdgeDetector():创建了一个边缘检测节点用于处理左侧单色图像。
  2. edgeDetectorRight = pipeline.createEdgeDetector():创建了一个边缘检测节点用于处理右侧单色图像。
  3. edgeDetectorRgb = pipeline.createEdgeDetector():创建了一个边缘检测节点用于处理彩色图像。

这些边缘检测节点可以应用于左侧单色图像、右侧单色图像和彩色图像,以便检测图像中的边缘特征。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九仞山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值