循环 - 它停止工作

时间:2015-09-11 13:13:51

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

这是我的问题:

我正在使用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']

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您的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