python-2.7 - 用于读取图像的嵌套 for 循环
问题描述
我编写了一个代码,可以打开一个文件夹并将包含的图像相互比较。我试图让它递归地应用于文件夹中的所有子目录。
我不能使用 iglob 的递归参数,因为它在 python 2 中不可用。我必须使用 python 2,因为代码依赖于 opencv 的 SIFT 算法,该算法仅适用于 python 2。我不想尝试为 python 编译3 因为我必须将代码交给其他人,他们可能无法进行编译。
这是 iglob 下的工作代码 - cv2 正确读取图像的证明是 image1 打印了代表图像的点列表:
import cv2 #opencv 3.4.2.16 and opencv-contrib - https://pypi.org/project/opencv-python/3.4.2.16/
import glob
for a in glob.iglob(r"/home/kate/Downloads/images/*"):
for b in glob.iglob(r"/home/kate/Downloads/images/*"):
image1 = cv2.imread(a)
print image1
image2 = cv2.imread(b)
print image2
这是我尝试将其更改为os.walk
:
path = "/home/kate/Downloads/images/"
for a in os.walk(path):
for b in os.walk(path):
image1 = cv2.imread(os.path.join(path,a))
print image1
image2 = cv2.imread(os.path.join(path,b))
print image2
错误代码:
Traceback (most recent call last):
File "/home/kate/hello/test3.py", line 31, in <module>
image2 = cv2.imread(os.path.join(path,a))
File "/usr/lib64/python2.7/posixpath.py", line 68, in join
if b.startswith('/'):
AttributeError: 'tuple' object has no attribute 'startswith'
所以我检查了type
两段代码中的“a”,在工作代码中,“a”是一个字符串。在非工作代码中,它是元组——具体来说,它是一个由三个数组组成的元组:根、目录和文件。所以,我把它改成这样:
path = "/home/kate/Downloads/images"
for root, dirs, a in os.walk(path):
for root, dirs, b in os.walk(path):
print a
print b
但是现在,“a”是一个由文件名组成的数组。我是否必须运行另一个 for 循环来单独获取每个文件名?
解决方案
推荐阅读
- sql-server - Google Data Fusion 中的 SQL Server 源不起作用(SSL 握手问题)
- java - Eclipse IDE 将 jar 直接转换为可执行 jar。如何创建jar文件?
- ios - 单击 uiwebview 的文本字段时应用程序崩溃
- c# - 将 JS 数组字符串转换为 C# 列表
- excel - Excel VBA 格式
- cassandra - gc_grace_seconds(10 天)过去后磁盘空间未减少
- visual-studio - Visual Studio 扩展:如何使编辑器文本表现得像一个链接
- java - 如何将 JDialog 存储在由 JOptionPane 创建的 JDialog 对象中
- postgresql - 为什么 RETURN NEXT 不能在带有 OUT 参数的函数中有参数?
- c# - 来自 C# 不完整数据的 NodeJS 发布请求