类似视频教程网站的wordpress主题,南京网站制作公司排名前十,太原做学校网站的公司,网站建设页面带声音类似于人的眼睛和大脑#xff0c;OpenCV可以检测图像的主要特征并将这 些特征提取到所谓的图像描述符中。然后#xff0c;可以将这些特征作为数据 库#xff0c;支持基于图像的搜索。此外#xff0c;我们可以使用关键点将图像拼接起 来#xff0c;组成更大的图像。#x… 类似于人的眼睛和大脑OpenCV可以检测图像的主要特征并将这 些特征提取到所谓的图像描述符中。然后可以将这些特征作为数据 库支持基于图像的搜索。此外我们可以使用关键点将图像拼接起 来组成更大的图像。想象一下把很多图片放到一起组成一幅360°的全景图。 本节将展示如何使用OpenCV检测图像中的特征并利用这些特征 匹配和检索图像。在本节的学习过程中我们会获取样本图像并检测 其主要特征然后试着在另一幅图像中找到与样本图像匹配的区域。 我们还将找到样本图像和另一幅图像匹配区域之间的单应性或者空间 关系。
Harris角点检测是计算机视觉领域中一种经典的角点检测算法它可以用于许多应用场景。
以下是一些Harris角点检测的应用场景
图像配准 在图像配准中Harris角点检测可以用于找到两幅图像中具有相似特征的角点从而进行图像对齐和匹配。
物体跟踪 在目标跟踪中Harris角点检测可以用于提取图像中的显著特征帮助识别和跟踪目标。
摄像头标定 在摄像头标定中Harris角点检测可以用于检测摄像头拍摄图像中的角点帮助计算摄像头的内参和外参。
三维重建 在三维重建中Harris角点检测可以用于提取图像中的关键特征点帮助建立图像间的对应关系从而实现场景的三维重建。
物体识别 在物体识别中Harris角点检测可以用于提取图像中的特征点帮助识别和分类不同的物体。
自动驾驶 在自动驾驶领域Harris角点检测可以用于检测图像中的道路边缘和关键特征帮助自动驾驶系统判断道路情况。
图像拼接 在图像拼接中Harris角点检测可以用于提取图像中的角点帮助找到不同图像之间的对应关系实现图像拼接和全景图生成。
图像匹配 在图像匹配中Harris角点检测可以用于寻找两幅图像中具有相似特征的角点从而进行图像配准和匹配。
理解特征检测和匹配的类型
OpenCV中最常用的特征检测和描述符提取算法如下
Harris该算法适用于角点检测。SIFT该算法适用于斑点检测。SURF该算法适用于斑点检测。FAST该算法适用于角点检测。BRIEF该算法适用于斑点检测。ORB它是Oriented FAST和Rotated BRIEF的联合缩写。ORB对于角点和斑点的组合检测很有用。
可以通过下列方法进行特征匹配
蛮力匹配。基于FLANN的匹配。
可以通过单应性进行空间验证。
究竟什么是特征
为什么图像的某个特定区域可以归类为特征而其他区域则不能分类为特征呢广义地说特征是图像中独特或容易识别的一个感兴趣区域。具有高密度纹理细节的角点和区域是好的特征而在低密度区域如蓝天不断重复出现的模式就不是好的特征。边缘是好的特征因为它们倾向于把图像分割成两个区域。斑点与周围区域有很大差别的图像区域也是一个有趣的特征。
大多数特征检测算法都围绕着角点、边缘和斑点的识别展开有 些还关注岭ridge的概念其中岭可以概念化为细长物体的对称 轴。例如想象一下识别图像中的道路。
有些算法更擅长识别和提取特定类型的特征所以了解输入图像 是什么很重要这样就可以利用OpenCV中的最佳工具了。
检测Harris角点
什么是角点 在计算机视觉和图像处理中角点Corner是图像中突出的、有角度的、明显的像素点。角点通常位于图像中物体的边缘、纹理或其他特征的交叉点是图像中的显著特征点。角点对于图像处理中的许多任务如特征匹配、目标跟踪、3D重建等具有重要的作用。 角点具有以下特征
局部极大值 在角点周围的邻域中角点的像素值应该是局部最大值。
方向变化 角点处的像素点方向会在不同方向上有较大的变化这是因为角点是明显的图像特征。
明暗对比 角点处的像素点周围可能是明暗对比较大的区域因为角点是由物体的边缘、纹理等特征交叉形成的。
可重复性 角点在不同的尺度和旋转下仍然可以被检测到这使得它们在不同场景中都有用途。
下面看一下角点的类型
cv2.cornerHarris 函数说明 dstcv2.cornerHarris(img, blockSize, ksize, k) 公式中参数
img表示原始图像blockSize表示角点检测中的领域大小ksize表示Sobel求导中使用的窗口大小k表示Harris 角点检测方程中的自由参数,取值参数为[0,04, 0.06]
代码示例
import numpy as np
import cv2# 读取待检测的图像
img cv2.imread(chess_board.png)
# 转换为灰度图像
gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray np.float32(gray)
# 调用函数 cornerHarris检测角点其中参数 2 表示 Sobel 算子的孔径大小23 表示 Sobel 算子的孔径大小0.04 表示 Harris 角点检测方程中的 k 值
dst cv2.cornerHarris(gray,2,23,0.04)dst cv2.dilate(dst,None)
# 将检测到的角点标记出来
img[dst0.01*dst.max()][0,0,255]cv2.imshow(dst,img)cv2.waitKey(0)
cv2.destroyAllWindows()运行效果 这里我们选取的像素的分值至少是最高分值的1%并在原始图 像中将这些像素涂成红色。