cv2.DescriptorMatcher_create()函数
时间: 2023-10-20 16:08:54 浏览: 192
cv2.DescriptorMatcher_create()函数是OpenCV中用于创建特征匹配器的函数。它接受一个字符串参数,可以是以下四个中的任何一个:
1. "BruteForce":暴力匹配器,它是最简单的匹配器,它将查询描述符与所有训练描述符进行比较,并返回最佳匹配。
2. "BruteForce-L1":基于L1距离度量的暴力匹配器。
3. "BruteForce-Hamming":基于汉明距离度量的暴力匹配器,它适用于二进制描述符。
4. "FlannBased":基于FLANN(快速最近邻搜索库)算法的匹配器,它可以快速地找到最近邻居,并且对于大规模数据集具有较高的效率。
这个函数返回一个特征匹配器对象,可以在后续的特征匹配过程中使用它。
相关问题
cv2.DescriptorMatcher_create()函数,创建欧式距离匹配器的代码
以下是使用cv2.DescriptorMatcher_create()函数创建欧式距离匹配器的代码:
```
import cv2
# 创建SIFT特征提取器和描述符
sift = cv2.xfeatures2d.SIFT_create()
# 读取图片并提取特征
img1 = cv2.imread('img1.jpg')
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
kp1, des1 = sift.detectAndCompute(gray1, None)
img2 = cv2.imread('img2.jpg')
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
kp2, des2 = sift.detectAndCompute(gray2, None)
# 创建欧式距离匹配器
matcher = cv2.DescriptorMatcher_create(cv2.DESCRIPTOR_MATCHER_BRUTEFORCE)
# 匹配特征
matches = matcher.match(des1, des2)
# 绘制匹配结果
img_matches = cv2.drawMatches(img1, kp1, img2, kp2, matches, None)
cv2.imshow("Matches", img_matches)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先使用SIFT特征提取器和描述符提取了两张图片的特征。然后,我们使用cv2.DescriptorMatcher_create()函数创建了一个欧式距离匹配器,这里我们使用了cv2.DESCRIPTOR_MATCHER_BRUTEFORCE参数来指定使用暴力匹配器。接着,我们使用matcher.match()函数对两张图片的描述符进行匹配,并将匹配结果绘制出来。最后,我们使用cv2.imshow()函数显示匹配结果,并使用cv2.waitKey()函数等待用户按下键盘任意键,最后使用cv2.destroyAllWindows()函数关闭所有窗口。
def get_good_match(des1, des2,): matcher = cv2.DescriptorMatcher_create(cv2.DescriptorMatcher_FLANNBASED) matches = matcher.knnMatch(des1, des2, k=2) good = [] for m, n in matches: if m.distance < 0.75 * n.distance: good.append(m) return good 这段代码含义
这段代码是一个函数,输入参数为两个图像的特征描述符 `des1` 和 `des2`,输出为两个图像匹配的好的特征点对应关系。具体实现如下:
1. 创建一个基于FLANN的特征描述符匹配器 `matcher`。
2. 使用 `matcher` 对两个特征描述符 `des1` 和 `des2` 进行匹配,得到最接近的两个匹配点 `m` 和 `n`。
3. 对于每个匹配对 `(m, n)`,如果 `m` 点与 `n` 点的距离小于 `0.75` 倍的 `n` 点距离,则将其视为好的匹配点并添加到 `good` 列表中。
4. 返回所有好的匹配点对应关系。
这段代码的作用是实现图像匹配,可以用于计算机视觉和图像处理领域的许多应用,例如目标跟踪、三维重建、图像拼接等。
阅读全文