gpt4 book ai didi

python - Opencv:BoW计算SURF描述符

转载 作者:行者123 更新时间:2023-12-02 17:46:27 29 4
gpt4 key购买 nike

我正在尝试在一组图像上提取单词,以提取SURF描述符。但是,我在下面粘贴的代码的最后一行上获得以下错误:

类型== src2.type()&& src1.cols == src2.cols &&(类型== CV_32F ||类型== CV_8U)

如果我改用“SIFT”,则一切正常。但是当我使用“SURF”时,BoW无法计算SURF描述符。

这是实例化SURF的正确方法吗?我可以使用cv2.NORM_L2距离函数吗?

imgs2Keypoints = {}
kmeansTrainer = cv2.BOWKMeansTrainer(10);
for pathToImage in images:
sift = cv2.SURF(400)
img = cv2.imread(pathToImage)
kp, des = sift.detectAndCompute(img, None)
des = np.float32(des)
kmeansTrainer.add(des)
imgs2Keypoints[pathToImage] = kp
vocabulary = kmeansTrainer.cluster()
bow_ext.setVocabulary(vocabulary)

surf2 = cv2.DescriptorExtractor_create("SURF")
bow_ext = cv2.BOWImgDescriptorExtractor(surf2, cv2.BFMatcher(cv2.NORM_L2))

for pathToImage in images:
img = cv2.imread(pathToImage)
histogram = bow_ext.compute(img, imgs2Keypoints[pathToImage])[0]

最佳答案

编辑:

sift = cv2.SURF(400)

创建扩展的SURF描述符(128维),而
surf2 = cv2.DescriptorExtractor_create("SURF")

创建标准的SURF描述符(64维)。

一种可能的解决方案是禁用sift对象的扩展描述符
sift.extended = False

编辑2:

与扩展描述符一起使用:
surf2.setBool("extended", True)

至于L2规范:是的,L2距离很好。如 OpenCV docs中所述:

L1 and L2 norms are preferable choices for SIFT and SURF descriptors

关于python - Opencv:BoW计算SURF描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34217091/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com