创建图像对的元组

2024-04-25 01:03:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着遍历我的子目录,每个子目录包含两个图像。我试着读这两张图片,然后把它们放在一个元组中。我就是这么做的:

import os
import os.path
from PIL import Image
import cv2

path = '/Users/abc/Desktop/images'
pairs = []

for root, dirs, files in os.walk(path):
    for file in files:
        if file.startswith('1'):
            im1 = cv2.imread(root + '/' + '1.jpg')
        elif file.startswith('2'):
            im2 = cv2.imread(root + '/' + '2.jpg')

    pair = (im1,im2)
    pairs.append(pair)

但是,我得到以下错误:

^{pr2}$

我做错什么了?在

谢谢。在


Tags: pathinimportforosrootfilescv2
3条回答

在您的代码中im1没有声明。我是说这条线

im1 = cv2.imread(root + '/' + '1.jpg')

确保你经历了所有的情况。否则,在for循环之前为im1im2声明一个默认值。在

原始答案:

在循环之前声明并分配变量。我不认为这真的是一个好的方法,但你的问题包含的有用信息太少,无法做出一个好的解决办法。在

import os
import os.path
from PIL import Image
import cv2

path = '/Users/abc/Desktop/images'
pairs = []

for root, dirs, files in os.walk(path):

    im1 = None
    im2 = None

    for file in files:
        if file.startswith('1'):
            im1 = cv2.imread(root + '/' + '1.jpg')
        elif file.startswith('2'):
            im2 = cv2.imread(root + '/' + '2.jpg')

    ## TODO: make sure im1 and im2 is `OK`
    # ..

    pair = (im1,im2)
    pairs.append(pair)

更新:

1.以下面的代码snape为例:

^{pr2}$

1)如果if-condition不满足,则不执行代码,引用时未分配变量。在

>>> test(1)
UnboundLocalError: local variable 'i1' referenced before assignment

2)当离开loop时,for-loop中的局部赋值变量可能仍然存在(如果没有被GC删除)。在

>>> test(5)
3 4

2.那么如果我们想使用变量而不管条件满足,我们可以先声明并分配变量。但一定要check whether the variable is OK。在

def test2(x):
    # just for testing
    i1,i2 = None, None # declare and assign the variables 
    for i in range(x):
        if i%2 :
            i1 = i # last odd
        else:
            i2 = i # last even

    print(i1, i2)

在使用前声明并分配变量,不会出现语法错误。在

但是remember to check whether value is ok(我不认为{}是可以的)。在

>>> test2(1)
None 0       
>>> test2(5)
3 4

im1的“IF”条件不满足。可能有两个原因1。文件(1.jpg)不存在。2文件名将不同,如“1.jpg”或“~1.jpg”等。请仔细检查。添加语句“print files”以检查位置中的文件

import os
import os.path
from PIL import Image
import cv2

path = '/Users/abc/Desktop/images'
pairs = []

for root, dirs, files in os.walk(path):
    for file in files:
        if file.startswith('1'): 
            im1 = cv2.imread(root + '/' + '1.jpg')
        elif file.startswith('2'):
            im2 = cv2.imread(root + '/' + '2.jpg')

    pair = (im1,im2)
    pairs.append(pair)

相关问题 更多 >