Python OpenCV ORB 特征点匹配错误解决:ValueError: not enough values to unpack (expected 2, got 1)

这个错误是由于在 for 循环中的 matches12 变量中的元素不是一个元组,而是一个单独的匹配对象。这可能是因为没有找到足够的匹配,导致 matches12 列表为空。因此,在解包元组之前,需要先检查 matches12 列表是否为空。可以使用以下代码进行修改:

# 对图像1和图像2的特征点进行匹配
matches12 = flann.knnMatch(descriptors1, descriptors2, k=2)
good_matches12 = []
for match in matches12:
    if len(match) < 2:
        continue
    m, n = match
    if m.distance < 0.7 * n.distance:
        good_matches12.append(m)

解释:

  • 原始代码使用 for m, n in matches12: 试图将 matches12 中的每个元素解包为两个变量 mn
  • matches12 列表为空或包含单个匹配对象时,就会导致 ValueError: not enough values to unpack (expected 2, got 1) 错误。
  • 修改后的代码使用 for match in matches12: 遍历 matches12 列表,并检查每个 match 的长度。如果长度小于 2,则跳过该匹配。
  • 如果长度大于等于 2,则使用 m, n = match 解包匹配对象,并进行后续的距离比较和筛选。

通过以上修改,可以避免 ValueError: not enough values to unpack (expected 2, got 1) 错误,并确保程序能够正常进行特征点匹配。

Python OpenCV ORB 特征点匹配错误解决:ValueError: not enough values to unpack (expected 2, got 1)

原文地址: https://www.cveoy.top/t/topic/koLv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录