我正在尝试遍历我的子目录,其中每个子目录包含两个图像。我正在尝试阅读这两个图像,并将它们作为一对组合在一个元组中。这就是我所做的:
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)
但是我收到以下错误:
Traceback (most recent call last):
File "create_pair.py", line 16, in <module>
pair = (im1,im2)
NameError: name 'im1' is not defined
我做错了什么?
感谢。
答案 0 :(得分:1)
原始答案:
在循环之前声明并分配变量。我不认为这是一个很好的方法,但你的问题包含的信息很少,无法提供良好的解决方案。
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为例:
def test(x):
# just for testing
for i in range(x):
if i%2 :
i1 = i # last odd
else:
i2 = i # last even
print(i1, i2)
1)if-condition
不满足,然后代码不被执行,变量在被引用时被分配。
>>> test(1)
UnboundLocalError: local variable 'i1' referenced before assignment
2)for-loop
以外的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
(我不认为None
可以。)
>>> test2(1)
None 0
>>> test2(5)
3 4
答案 1 :(得分:0)
在您的代码im1
中未声明。我的意思是这一行,
im1 = cv2.imread(root + '/' + '1.jpg')
确保您已经完成所有条件。否则在for循环之前声明im1
和im2
的默认值。
答案 2 :(得分:0)
&#39; IF&#39; im1的条件不满足。这可能是由于两个原因1.文件(1.jpg)不存在。 2.文件名将有所不同,如&#39; 1.JPG&#39;或&#39; ~1.jpg&#39;等完全检查它。添加声明&#39;打印文件&#39;检查位置
中的文件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)