【问题标题】:Loop - it stops working循环 - 它停止工作
【发布时间】:2015-12-08 01:41:13
【问题描述】:

这是我的问题:

我正在使用 OpenCV 对一系列图像进行图像匹配。有 195 张图像,所以我需要读取第一和第二,匹配它们,读取第二和第三,匹配,读取第三和第四等。 我列出了这些照片,然后创建了一个循环,该循环应该在读取文件后从列表中删除第一个元素,匹配照片并再次:) 所以它可以工作......但不是到最后。它向我显示了列表中还有多少元素,并且在有 97 个元素之后似乎循环停止了。

你知道为什么吗?

这是代码(不匹配)

list_zdj=os.listdir('seq_06_AGH')
print len(list_zdj)

for element in list_zdj:
    img1=cv2.imread(list_zdj[0],0)
    list_zdj.pop(0)
    img2=cv2.imread(list_zdj[0],0)
    print len(list_zdj)

    #detecting,matching

print 'the end'

我认为匹配没有问题,因为我注释掉了所有匹配并且它的工作方式相同。

如果需要,这里是 list_zdj:

['DSC_0216.JPG', 'DSC_0217.JPG', 'DSC_0218.JPG', 'DSC_0219.JPG', 'DSC_0220.JPG', 'DSC_0221.JPG', 'DSC_0222.JPG', 'DSC_0223.JPG', 'DSC_0224.JPG', 'DSC_0225.JPG', 'DSC_0226.JPG', 'DSC_0227.JPG', 'DSC_0228.JPG', 'DSC_0229.JPG', 'DSC_0230.JPG', 'DSC_0231.JPG', 'DSC_0232.JPG', 'DSC_0233.JPG', 'DSC_0234.JPG', 'DSC_0235.JPG', 'DSC_0236.JPG', 'DSC_0237.JPG', 'DSC_0238.JPG', 'DSC_0239.JPG', 'DSC_0240.JPG', 'DSC_0241.JPG', 'DSC_0242.JPG', 'DSC_0243.JPG', 'DSC_0244.JPG', 'DSC_0245.JPG', 'DSC_0246.JPG', 'DSC_0247.JPG', 'DSC_0248.JPG', 'DSC_0249.JPG', 'DSC_0250.JPG', 'DSC_0251.JPG', 'DSC_0252.JPG', 'DSC_0253.JPG', 'DSC_0254.JPG', 'DSC_0255.JPG', 'DSC_0256.JPG', 'DSC_0257.JPG', 'DSC_0258.JPG', 'DSC_0259.JPG', 'DSC_0260.JPG', 'DSC_0261.JPG', 'DSC_0262.JPG', 'DSC_0263.JPG', 'DSC_0264.JPG', 'DSC_0265.JPG', 'DSC_0266.JPG', 'DSC_0267.JPG', 'DSC_0268.JPG', 'DSC_0269.JPG', 'DSC_0270.JPG', 'DSC_0271.JPG', 'DSC_0272.JPG', 'DSC_0273.JPG', 'DSC_0274.JPG', 'DSC_0275.JPG', 'DSC_0276.JPG', 'DSC_0277.JPG', 'DSC_0278.JPG', 'DSC_0279.JPG', 'DSC_0280.JPG', 'DSC_0281.JPG', 'DSC_0282.JPG', 'DSC_0283.JPG', 'DSC_0284.JPG', 'DSC_0285.JPG', 'DSC_0286.JPG', 'DSC_0287.JPG', 'DSC_0288.JPG', 'DSC_0289.JPG', 'DSC_0290.JPG', 'DSC_0291.JPG', 'DSC_0292.JPG', 'DSC_0293.JPG', 'DSC_0294.JPG', 'DSC_0295.JPG', 'DSC_0296.JPG', 'DSC_0297.JPG', 'DSC_0298.JPG', 'DSC_0299.JPG', 'DSC_0300.JPG', 'DSC_0301.JPG', 'DSC_0302.JPG', 'DSC_0303.JPG', 'DSC_0304.JPG', 'DSC_0305.JPG', 'DSC_0306.JPG', 'DSC_0307.JPG', 'DSC_0308.JPG', 'DSC_0309.JPG', 'DSC_0310.JPG', 'DSC_0311.JPG', 'DSC_0312.JPG', 'DSC_0313.JPG', 'DSC_0314.JPG', 'DSC_0315.JPG', 'DSC_0316.JPG', 'DSC_0317.JPG', 'DSC_0318.JPG', 'DSC_0319.JPG', 'DSC_0320.JPG', 'DSC_0321.JPG', 'DSC_0322.JPG', 'DSC_0323.JPG', 'DSC_0324.JPG', 'DSC_0325.JPG', 'DSC_0326.JPG', 'DSC_0327.JPG', 'DSC_0328.JPG', 'DSC_0329.JPG', 'DSC_0330.JPG', 'DSC_0331.JPG', 'DSC_0332.JPG', 'DSC_0333.JPG', 'DSC_0334.JPG', 'DSC_0335.JPG', 'DSC_0336.JPG', 'DSC_0337.JPG', 'DSC_0338.JPG', 'DSC_0339.JPG', 'DSC_0340.JPG', 'DSC_0341.JPG', 'DSC_0342.JPG', 'DSC_0343.JPG', 'DSC_0344.JPG', 'DSC_0345.JPG', 'DSC_0346.JPG', 'DSC_0347.JPG', 'DSC_0348.JPG', 'DSC_0349.JPG', 'DSC_0350.JPG', 'DSC_0351.JPG', 'DSC_0352.JPG', 'DSC_0353.JPG', 'DSC_0354.JPG', 'DSC_0355.JPG', 'DSC_0356.JPG', 'DSC_0357.JPG', 'DSC_0358.JPG', 'DSC_0359.JPG', 'DSC_0360.JPG', 'DSC_0361.JPG', 'DSC_0362.JPG', 'DSC_0363.JPG', 'DSC_0364.JPG', 'DSC_0365.JPG', 'DSC_0366.JPG', 'DSC_0367.JPG', 'DSC_0368.JPG', 'DSC_0369.JPG', 'DSC_0370.JPG', 'DSC_0371.JPG', 'DSC_0372.JPG', 'DSC_0373.JPG', 'DSC_0374.JPG', 'DSC_0375.JPG', 'DSC_0376.JPG', 'DSC_0377.JPG', 'DSC_0378.JPG', 'DSC_0379.JPG', 'DSC_0380.JPG', 'DSC_0381.JPG', 'DSC_0382.JPG', 'DSC_0383.JPG', 'DSC_0384.JPG', 'DSC_0385.JPG', 'DSC_0386.JPG', 'DSC_0387.JPG', 'DSC_0388.JPG', 'DSC_0389.JPG', 'DSC_0390.JPG', 'DSC_0391.JPG', 'DSC_0392.JPG', 'DSC_0393.JPG', 'DSC_0394.JPG', 'DSC_0395.JPG', 'DSC_0396.JPG', 'DSC_0397.JPG', 'DSC_0398.JPG', 'DSC_0399.JPG', 'DSC_0400.JPG', 'DSC_0401.JPG', 'DSC_0402.JPG', 'DSC_0403.JPG', 'DSC_0404.JPG', 'DSC_0405.JPG', 'DSC_0406.JPG', 'DSC_0407.JPG', 'DSC_0408.JPG', 'DSC_0409.JPG', 'DSC_0410.JPG']

【问题讨论】:

    标签: list python-2.7 loops opencv for-loop


    【解决方案1】:

    循环提前结束,因为您正在修改循环内的列表。不要从您正在迭代的列表中弹出值。

    要了解如何一次遍历列表中的两个元素,请参阅 Iterating over every two elements in a list 和/或 Iterate a list as pair (current, next) in Python

    【讨论】:

      【解决方案2】:

      您的pop 列表有问题。使用可以匹配您所需格式的此方法。

      for i in list_zdj:
          if i != list_zdj[-1:][0]:
              a = cv2.imread(i,0)
              b = cv2.imread(list_zdj[list_zdj.index(i)+1],0)
              print a,b
              #matching a and b
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-06
        相关资源
        最近更新 更多