Python 3.x 在Python的多个文件夹中组合多个图像
我有一个灰度图像文件夹(100x100像素),文件名如下:Python 3.x 在Python的多个文件夹中组合多个图像,python-3.x,image,numpy-ndarray,Python 3.x,Image,Numpy Ndarray,我有一个灰度图像文件夹(100x100像素),文件名如下: 文件_123_A.ome.tif 文件_123_B.ome.tif 文件_123_C.ome.tif 文件_125_A.ome.tif 文件_125_B.ome.tif 文件_125_C.ome.tif 每个文件名的编号(在我上面的示例中为123和125)链接图像,因此这些图像集是相关的 我正在尝试将文件读入一个numpy数组,然后将三个相关的图像组合成一个100x100x3或100x300的新图像 我可以愉快地将A集合中的图像读入
- 文件_123_A.ome.tif
- 文件_123_B.ome.tif
- 文件_123_C.ome.tif
- 文件_125_A.ome.tif
- 文件_125_B.ome.tif
- 文件_125_C.ome.tif
#Set directory to look in
file = glob.glob(r'my_directory\**\*.tif',recursive = True)
#Loop though the files and put all the uniques files name into a list
fname_lst = []
for img in file:
i = img.split('\\')[5][:-12]
fname_lst.append(i)
fname_lst = set(fname_lst)
显然.split对于我的文件名是唯一的,但它确实有效。这应该可以满足您对当前目录中所有文件组的要求。我将让您添加错误处理和其他小变化:
#!/usr/bin/env python3
import cv2
from glob import glob
# Get list of files matching "*A.ome.tif"
files = glob("*A.ome.tif")
# Get list of unique stems
stems = [f.replace('A.ome.tif', '') for f in files]
# Iterate over unique stems
for stem in stems:
A = cv2.imread(stem + 'A.ome.tif')
B = cv2.imread(stem + 'B.ome.tif')
C = cv2.imread(stem + 'C.ome.tif')
# Stack images horizontally (side-by-side), use np.dstack() for merging channels
result = np.hstack((A,B,C))
cv2.imwrite(stem + 'result.tif', result)
这应该可以满足您对当前目录中所有文件组的要求。我将让您添加错误处理和其他小变化:
#!/usr/bin/env python3
import cv2
from glob import glob
# Get list of files matching "*A.ome.tif"
files = glob("*A.ome.tif")
# Get list of unique stems
stems = [f.replace('A.ome.tif', '') for f in files]
# Iterate over unique stems
for stem in stems:
A = cv2.imread(stem + 'A.ome.tif')
B = cv2.imread(stem + 'B.ome.tif')
C = cv2.imread(stem + 'C.ome.tif')
# Stack images horizontally (side-by-side), use np.dstack() for merging channels
result = np.hstack((A,B,C))
cv2.imwrite(stem + 'result.tif', result)
你的意思是说你的脚本应该在连接图像的整个目录中递归,或者它应该在一个目录中执行所有图像,或者你应该向它传递参数
file_XXX
,它应该只连接当前目录中以该前缀开头的图像?我想我是在问你想用什么参数调用脚本?谢谢你的回答。我需要找到文件夹中所有具有相同XXX的图像,并将这些图像的a、B、C版本连接在一起。对子目录执行此操作可能会变得复杂,因为每个子目录中的文件_XXX中的文件都会发生更改。这有意义吗?尝试使用glob()
获取所有TIFF的列表。然后删除每个文件名中第二个下划线后的所有内容,并将结果添加到一个集合中,这样您将拥有一组唯一的文件名前缀。然后你可以重复这些,添加A/B/C
后缀并合并文件。我想我理解你的方法。我要试一试谢谢你的回复。试试看。单击问题下方的edit
,然后粘贴任何你开始工作的代码,并说出你被卡住的地方。你的意思是你的脚本应该在连接图像的整个目录中递归,或者它应该在一个目录中处理所有图像,或者您应该向它传递参数file_XXX
,并且它应该只连接当前目录中以该前缀开头的图像?我想我是在问你想用什么参数调用脚本?谢谢你的回答。我需要找到文件夹中所有具有相同XXX的图像,并将这些图像的a、B、C版本连接在一起。对子目录执行此操作可能会变得复杂,因为每个子目录中的文件_XXX中的文件都会发生更改。这有意义吗?尝试使用glob()
获取所有TIFF的列表。然后删除每个文件名中第二个下划线后的所有内容,并将结果添加到一个集合中,这样您将拥有一组唯一的文件名前缀。然后你可以重复这些,添加A/B/C
后缀并合并文件。我想我理解你的方法。我要试一试谢谢你的回复。试试看。单击问题下方的edit
,然后粘贴任何你开始工作的代码,并说出你被卡住的地方。这太棒了。非常感谢马克,只需对特定目录进行一点编辑,我就可以工作了。更好的是,我可以看看这个,看看它主要在做什么。有几点我需要检查和阅读。酷-祝你的项目好运。如果你被卡住了,回来问一个新问题-问题(和答案)是免费的:-)太棒了,非常感谢你,马克,对特定目录进行了一些编辑,我已经开始工作了。更好的是,我可以看看这个,看看它主要在做什么。有几点我需要检查和阅读。酷-祝你的项目好运。如果你陷入困境,回来问一个新问题-问题(和答案)是免费的:-)