为什么我没有足够的值来解压缩某些图像(预期2,得到1)?

时间:2019-06-26 20:28:37

标签: python opencv matching flann keypoint

int _currentPage = 0;
PageController _pageController = PageController(
  initialPage: 0,
);

@override
void initState() {
  super.initState();
  Timer.periodic(Duration(seconds: 5), (Timer timer) {
    if (_currentPage < 2) {
      _currentPage++;
    } else {
      _currentPage = 0;
    }

    _pageController.animateToPage(
      _currentPage,
      duration: Duration(milliseconds: 350),
      curve: Curves.easeIn,
    );
  });
}

@override
Widget build(BuildContext context) {
  return PageView(
    controller: _pageController,
    children: [
      Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            image: new AssetImage(images[0]), 
            fit: BoxFit.cover,
          ),
        ),
      ),
      Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            image: new AssetImage(images[1]), 
            fit: BoxFit.cover,
          ),
        ),
      ),
      Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            image: new AssetImage(images[2]), 
            fit: BoxFit.cover,
          ),
        ),
      ),
    ],
  );
}

我想将图像与另一个使用星标作为描述符的图像进行比较,并简短地检测描述符,因此它可以在某些图像上按预期工作,但在其他图像上(如附件2),则将抛出异常,尽管第二个图像是首先,当图像完全不同时,甚至会抛出相同的异常。

错误:

'dart:async'
  

ValueError:没有足够的值可解包(预期2,得到1)

图像:

主要

main

裁剪

cropped

我仍然会收到错误的无关图片

unrelated pic where i'd still get the error

1 个答案:

答案 0 :(得分:0)

这听起来好像您没有得到任何匹配。 尝试确保您有关键点。 也许您可以检查len(des_brief_o)len(des_brief_crop)的返回值。 在这种情况下,我假设matchesNone

所以我运行了您的代码,但遇到了同样的问题:

for m in matches:
    print(m)

有些匹配项仅包含一个元素或不包含任何元素。

...
[<DMatch 0x10e6b93f0>, <DMatch 0x10e6b9410>]
[<DMatch 0x10e6b9430>, <DMatch 0x10e6b9450>]
[<DMatch 0x10e6b9470>, <DMatch 0x10e6b9490>]
[<DMatch 0x10e6b94b0>, <DMatch 0x10e6b94d0>]
[]
[<DMatch 0x10e6b94f0>, <DMatch 0x10e6b9510>]
[<DMatch 0x10e6b9530>, <DMatch 0x10e6b9550>]
[<DMatch 0x10e6b9570>, <DMatch 0x10e6b9590>]
[]
[<DMatch 0x10e6b95b0>, <DMatch 0x10e6b95d0>]
[<DMatch 0x10e6b95f0>]
[<DMatch 0x10e6b9610>, <DMatch 0x10e6b9630>]
...

为什么不跳过没有匹配项或只有一个匹配项的结果:

good = []
for m in matches:
    if len(m) == 2:
       if m[0].distance < 0.7 * m[1].distance:
          good.append(m[0])