OpenCV遗漏知识点整理

一、视频处理

1.1 OpenCV指定视频编解码器的常用选项在这里插入图片描述

注意,帧速率和帧大小也必须指定,这些属性可以通过VideoCapture类的get()函数得到。但是摄像头的帧速率准确值不能通过get()方法返回,所以对于摄像头创建合适的VideoWriter类,要么对帧速率做出假设,要么用计时器来测量。

二、处理图像

2.1 傅里叶变换

  • 幅度谱:图像的幅度谱时另一种图像,幅度谱图像呈现了原始图像再变化方面的一种表示:把一幅图像中最明亮的像素放到图像中央,然后逐渐变暗,在边缘上的像素最暗,这样可以发现图像中有多少亮的像素和暗的像素,以及它们分布的百分比。

2.2 滤波器

  • 高通滤波器:用来检测图像的某个区域,然后根据像素和周围像素的亮度差值来提升该像素的亮度的滤波器,注意,滤波器中的所有值加起来为0
  • 低通滤波器:在像素与周围像素的亮度差值小于一个特定值时,平滑该像素的亮度,主要用于去噪和模糊化。
  • 核:一组权重的集合,它会应用在源图像的一个区域,并由此生成目标图像的一个像素。比如,大小尾7的核意味着每49(7*7)个源图像的像素会产生目标图像的一个像素。
  • 锐化、边缘检测以及模糊等滤波器都使用了高度对称的核,但是有时不对称的核也会得到一些有趣的效果。

2.3 边缘&轮廓检测

Canny边缘检测算法非常复杂,有5个步骤:

用高斯滤波器对图像进行去噪、计算梯度、在边缘上使用非最大抑制(NMS)、在检测到的边缘上使用双阈值去除假阳性,最后还会分析所有的边缘及其之间的连接,以保留真正的边缘并消除不明显的边缘。

轮廓检测
在这里插入图片描述

  • 轮廓检测不单单是用来检测图像或者视频帧中物体的轮廓,而且还有其他操作与轮廓检测有关,包括:计算多边形边界、形状逼近核计算感兴趣区域。

2.4 直线与圆检测

  • 直线检测
    可以通过HoughLinesHoughLinesP函数来完成,它们仅有的差异是:第一个函数使用的是标准Hough变换,第二个函数使用概率Hough变换(通过分析点的子集并估计这些点都属于一条直线的概率,这是标准Hough变换的优化版本,执行更快。)
    一个简单的示例,代码不知道什么bug无法复制黏贴,源码
    在这里插入图片描述HoughLinesP函数参数说明:
    1、需要处理的图像;
    2、线段的几何表示rhotheta,一般分别取1np.pi/180
    3、阈值。低于该阈值的直线会被忽略;
    4、最小直线长度和最大线间间距。

  • 圆检测
    HoughCircles函数用来检测圆,类似地,有一个圆心间地最小距离和圆地最小及最大半径,下面是一个简单地示例:代码不知道什么bug无法复制黏贴,源码
    在这里插入图片描述
    HoughCircles函数参数说明:
    在这里插入图片描述

三、图像检索以及基于图像描述符的搜索

本节主要是使用OpenCV来检测图像特征,并利用这些特征进行图像匹配和搜索。

3.1 特征检测算法

OpenCV中最常使用的特征检测和提取算法有:

  • Harris:用于检测角点
  • SIFT:用于检测斑点(Blob)
  • SURF:用于检测斑点
  • FAST:用于检测角点
  • BRIEF:用于检测斑点
  • ORB:该算法代表带方向的FAST算法与具有旋转不变性的BRIEF算法

通过以下方法进行特征匹配:

  • 暴力(Brute-Force)匹配法
  • 基于DLANN的匹配法
    可以采用单应性进行空间验证。

特征定义:

特征就是有意义的图像区域,该区域具有独特性或易于识别性。因此,角点及高密度区域是很好的特征,而大量重复的模式或低密度区域则不是好的特征;边缘可以将图像分为两个区域,因此也可以看作好的特征;斑点(与周围有很大差别的图像区域)也是有意义的特征。

检测角点特征
cornerHarris是一个非常方便且实用的OpenCV函数,该函数可以检测图像的角点。

DoG(Difference of Gaussians)
是对同一图像使用不同高斯滤波器所得到的结果,DoG操作的最终结果会得到感兴趣的区域(关键点)。

发布了96 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Thera_qing/article/details/104170255