当前位置:   article > 正文

GPU端到端目标检测YOLOV3全过程(中)_yolov3算法实现端到端的目标检测?

yolov3算法实现端到端的目标检测?

GPU端到端目标检测YOLOV3全过程(中)

计算机视觉初级部分知识体系

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结了一下自己在计算机视觉初级部分的知识框架,整理如下。

个人所学并不全面(比如图像频域方面了解就比较少),仅做参考。

图像点(pixel值)运算

  1. 直方图;2. 线性/非线性变换;3. 灰度均衡化/规定化;4. H-S直方图

图像几何变换

  1. 平移、旋转、镜像、缩放(图像金字塔,图像多尺度表达的一种方法,高斯金字塔、拉普拉斯金字塔);2. 仿射变换

空间域滤波

  1. 线性滤波2. 均值滤波、高斯滤波3. 非线性滤波4. 中值滤波、双边滤波

频域图像处理

傅里叶变换

形态学处理

腐蚀、膨胀、开运算、闭运算

边缘检测

Canny;sobel算子(求梯度)、LoG和DoG(DoG是LoG的一种简化算法)

hough变换

适用于直线、圆等其他具有解析式的简单形状

阈值

  1. 自适应阈值;2. 双阈值(Canny中有使用);3. 非极大值抑制(应用广泛,如目标检测)

轮廓

寻找轮廓、存储轮廓、多边形包围、轮廓的矩

局部特征

  1. 特征检测2. blob detection3. SIFT(尺度不变性、旋转不变性)、SURF(可用于不同帧间的匹配)4. corner detection5. Harris(单帧图像中)、Shi-Tomasi、亚像素级6. 特征描述7. 梯度统计直方图8. SIFT、SURF、HOG、KAZE9. 二进制字符串特征描述子(使用汉明距离匹配)10. ORB、LBP、BRIEF、BRISK、FREAK11. 应用12. 寻找已知物体(匹配,模板匹配)、透视变换

相机几何模型与相机标定

2D-to-3D
reconstruction

  1. single image2. 2-image3. 3-image4. N-image5. bundle adjustment approach6. Kalman Filter

Novel
sensors

  1. Structured light(Kinect)2. Time of flight laser

视频采集的基本流程

在这里插入图片描述

2、 打开视频设备

在V4L2中,视频设备被看做一个文件。使用open函数打开这个设备:

// 用非阻塞模式打开摄像头设备

int cameraFd;

cameraFd = open("/dev/video0", O_RDWR | O_NONBLOCK, 0);

// 如果用阻塞模式打开摄像头设备,上述代码变为:

//cameraFd = open("/dev/video0", O_RDWR, 0);

关于阻塞模式和非阻塞模式:应用程序能够使用阻塞模式或非阻塞模式打开视频设备,如果使用非阻塞模式调用视频设备,即使尚未捕获到信息,驱动依旧会把缓存(DQBUFF)里的东西返回给应用程序。

3、 设定属性及采集方式

打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在Linux编程中,一般使用ioctl函数来对设备的I/O通道进行管理:

extern int ioctl (int __fd, unsigned long int __request, …) __THROW;

__fd:设备的ID,例如刚才用open函数打开视频通道后返回的cameraFd;

__request:具体的命令标志符。

在进行V4L2开发中,一般会用到以下的命令标志符:

VIDIOC_REQBUFS:分配内存

VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址

VIDIOC_QUERYCAP:查询驱动功能

VIDIOC_ENUM_FMT:获取当前驱动支持的视频格式

VIDIOC_S_FMT:设置当前驱动的频捕获格式

VIDIOC_G_FMT:读取当前驱动的频捕获格式

VIDIOC_TRY_FMT:验证当前驱动的显示格式

VIDIOC_CROPCAP:查询驱动的修剪能力

VIDIOC_S_CROP:设置视频信号的边框

VIDIOC_G_CROP:读取视频信号的边框

VIDIOC_QBUF:把数据从缓存中读取出来

VIDIOC_DQBUF:把数据放回缓存队列

VIDIOC_STREAMON:开始视频显示函数

VIDIOC_STREAMOFF:结束视频显示函数

VIDIOC_QUERYSTD:检查当前视频设备支持的标准,例如PAL或NTSC。

这些IO调用,有些是必须的,有些是可选择的。

4、 检查当前视频设备支持的标准

在亚洲,一般使用PAL(720X576)制式的摄像头,而欧洲一般使用NTSC(720X480),使用VIDIOC_QUERYSTD来检测:

v4l2_std_id std;

do {

ret = ioctl(fd, VIDIOC_QUERYSTD, &std);

} while (ret == -1 && errno == EAGAIN);

switch (std) {

case V4L2_STD_NTSC:

    //……

case V4L2_STD_PAL:

    //……
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

}

5、 设置视频捕获格式

当检测完视频设备支持的标准后,还需要设定视频捕获格式:

struct v4l2_format fmt;

memset ( &fmt, 0, sizeof(fmt) );

fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

fmt.fmt.pix.width = 720;

fmt.fmt.pix.height = 576;

fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;

fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;

if (ioctl(fd, VIDIOC_S_FMT, &fmt) == -1) {

return -1;

}

v4l2_format结构体定义如下:

struct v4l2_format<

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/724051
推荐阅读
相关标签
  

闽ICP备14008679号