Python 如何在一个目录中添加(合并)多个图像
我在一个目录中有两种类型(A和B)的图像,我想将它们添加到一起(而不是串联),如下所示:Python 如何在一个目录中添加(合并)多个图像,python,opencv,cv2,os.path,Python,Opencv,Cv2,Os.path,我在一个目录中有两种类型(A和B)的图像,我想将它们添加到一起(而不是串联),如下所示: import glob import cv2 number_of_images = 750 for a_file in glob.glob('./A*'): for i in range(1,number_of_images): A = "A" + str(i) + ".jpeg" B = "B" + str(i) + ".jpeg" A1 = c
import glob
import cv2
number_of_images = 750
for a_file in glob.glob('./A*'):
for i in range(1,number_of_images):
A = "A" + str(i) + ".jpeg"
B = "B" + str(i) + ".jpeg"
A1 = cv2.imread(A,0)
B1 = cv2.imread(B,0)
image = cv2.add([A1,B1])
filename = ('Merged' + str(i) + '.jpeg')
cv2.imwrite(filename, image)
print(i)
if i==number_of_images-1:
break
A1.jpeg+B1.jpeg=Merged1.jpegA2.jpeg+B2.jpeg=Merged2.jpeg
..
AN.jpeg+BN.jpeg=MergedN.jpeg
我不知道如何自定义我的代码,使其适用于整个目录:
import cv2
import os
for i,filenames in os.walk('.'):
A1 = cv2.imread('A1.jpeg',0)
B1 = cv2.imread('B1.jpeg',0)
image = cv2.add([A1,B1])
filename = ('Merged' + {i} + '.jpeg')
cv2.imwrite(filename, image)
有什么想法吗?谢谢
编辑:
我在for循环中添加了计数器,因为您不能像我以前那样定义for循环
import cv2
import os
i=0
for filenames in os.walk('.'):
i = i + 1
A = "A" + str(i) + ".jpeg"
B = "B" + str(i) + ".jpeg"
Ai = cv2.imread(A,0)
Bi = cv2.imread(B,0)
image = cv2.add([Ai,Bi])
filename = ('Merged' + str(i) + '.jpeg')
cv2.imwrite(filename, image)
但它只增加了A1和B1。这是一种错误的循环计数方式吗?您可以使用
glob
因为我认为这样会更容易
导入全局
对于i,枚举中的_文件(glob.glob('./a*'):
A=cv2.imread(A_文件,0)
B=cv2.imread(a_file.replace('a','B'),0)
image=cv2.add([A,B])
文件名=('Merged'+{i}+'.jpeg')
cv2.imwrite(文件名、图像)
只需使用自定义变量在imread
中更改文件名,您可以在中使用i
A = "A" + str(i) + ".jpeg"
B = "B" + str(i) + ".jpeg"
Ai = cv2.imread(A,0)
Bi = cv2.imread(B,0)
我假设I
是一个数字。我这样解决它:
import glob
import cv2
number_of_images = 750
for a_file in glob.glob('./A*'):
for i in range(1,number_of_images):
A = "A" + str(i) + ".jpeg"
B = "B" + str(i) + ".jpeg"
A1 = cv2.imread(A,0)
B1 = cv2.imread(B,0)
image = cv2.add([A1,B1])
filename = ('Merged' + str(i) + '.jpeg')
cv2.imwrite(filename, image)
print(i)
if i==number_of_images-1:
break
谢谢你的建议 如何在glob中定义{i}?我在移动设备上,但枚举返回两件事吗?一个给我,一个给你的文件?我想您忘了重复文件名列表的glob。@ankii enumrate接受一个interable,并返回索引,以及它自身在iterableI中的正确顺序的值。我得到一个错误:对于I,os.walk('.'):ValueError:太多值无法解压缩(预期为2)您可能知道如何在os.walk()中定义I吗?您可以计算os.WACK返回列表,并使用范围(计数)从中选择数字。关于您的编辑,请通过打印检查A和B是什么。即使cv2找不到文件,它也会保持静默。如果所有图像的数量为750,则甚至不需要运行glob。您没有在循环的后面使用变量a_file。对吧@reznik?使用750运行循环,即仅运行内部循环。