Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在一个目录中添加(合并)多个图像_Python_Opencv_Cv2_Os.path - Fatal编程技术网

Python 如何在一个目录中添加(合并)多个图像

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

我在一个目录中有两种类型(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 = 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.jpeg
A2.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运行循环,即仅运行内部循环。