python实现将多张图片结合为一张图片的方法

将多张图片结合为一张图片

案例一:

import cv2
import numpy as np
import os
import glob

# img1=cv2.imread(r"F:\myyolov5\202302141303-L2_27.jpg")
# print(img1.shape)
# img2=cv2.imread(r"F:\myyolov5\202303011344R2_112_1.jpg")
# print(img2.shape)
# img1=cv2.resize(img1,(512,500))
# img2=cv2.resize(img2,(512,500))
# inputs=np.hstack((img1,img2))
# # cv2.imshow("input img",inputs)
# cv2.imwrite(r"F:\Desktop\a.jpg",inputs)
# cv2.waitKey(0)


def open_image(path1):
    img_path = glob.glob(path1)
    print(img_path)
    return np.array([cv2.imread(true_path,0) for true_path in img_path])

def combine_images(datasets,newraw,newcol):
    raw,col = datasets[0].shape
    newimage = np.zeros((newraw*raw,newcol*col))
    for i in range(0,newraw):
        for j in range(0,newcol):
            for ii in range(0,raw):
                for jj in range(0,col):
                    newimage[i*raw+ii][j*col+jj] = output[i*newcol+j][ii][jj]

    return newimage


if __name__ == '__main__':
    inputpath = 'F:\Desktop\myfile\*'
    output = open_image(inputpath)

    ohhh = combine_images(output,1,14)  # 这个4,6的意思就是,我的图片通过那个打开的函数之后,变成了一个大的ndarray里面有24张图片,我想让他们以,行4列6,的形式组合起来。
    cv2.imwrite(r"F:\Desktop\b.jpg",ohhh)

案例二:

def image_resize(img_name):
    img=cv2.imread(img_name,0)
    # w,h=img.shape
    # img=cv2.resize(img,(int(w/2),int(h/2)))
    return img


def open_image(path1):
    img_path = glob.glob(path1)
    print(img_path)
    img_path.sort(key=lambda x: int(x.split("\\")[-1].split(".")[0]))
    print(img_path)
    # return np.array([cv2.imread(true_path,0) for true_path in img_path])
    return np.array([image_resize(true_path) for true_path in img_path])

def combine_images(datasets,newraw,newcol):
    raw,col = datasets[0].shape
    newimage = np.zeros((newraw*raw,newcol*col))
    for i in range(0,newraw):
        for j in range(0,newcol):
            for ii in range(0,raw):
                for jj in range(0,col):
                    newimage[i*raw+ii][j*col+jj] = output[i*newcol+j][ii][jj]

    return newimage


if __name__ == '__main__':
    num_name="right_up"
    select="right_up"
    # inputpath = r'F:\Desktop\image\right_up\352\*'
    inputpath=r"D:\image\%s\%s\*"%(select,num_name)
    outputpath=r"D:\360_ditie_concat_after_image1\%s"%(select)
    if not os.path.exists(outputpath):
        os.mkdir(outputpath)
    # print(inputpath)
    output = open_image(inputpath)
    print(output.shape)
    ohhh=np.concatenate(output,1)
    print(ohhh.shape)
    # ohhh = combine_images(output,1,output.shape[0])  # 这个4,6的意思就是,我的图片通过那个打开的函数之后,变成了一个大的ndarray里面有24张图片,我想让他们以,行4列6,的形式组合起来。
    # print(ohhh.shape)
    # cv2.imwrite(os.path.join(outputpath,"GZDT18-043044_left_up_camImg_%s.jpg"%(num_name)),ohhh,[cv2.IMWRITE_JPEG_QUALITY, 90])
    cv2.imwrite(os.path.join(outputpath, "GZDT18-043044_%s_camImg_%s.png" % (select,num_name)), ohhh)

案例三:

import cv2
import numpy as np
import os
import glob

def open_image(path1):
    img_path = glob.glob(path1)
    print(img_path)
    img_path.sort(key=lambda x: int(x.split("\\")[-1].split(".")[0]))
    print(img_path)
    x1,x2,x3,x4=img_path[:15],img_path[15:30],img_path[30:45],img_path[45:60]
    x1=np.array([cv2.imread(true_path, 0) for true_path in x1])
    x2=np.array([cv2.imread(true_path,0) for true_path in x2])
    x3=np.array([cv2.imread(true_path,0) for true_path in x3])
    x4=np.array([cv2.imread(true_path,0) for true_path in x4])
    return x1,x2,x3,x4

def combine_images(datasets,newraw,newcol):
    raw,col = datasets[0].shape
    newimage = np.zeros((newraw*raw,newcol*col))
    for i in range(0,newraw):
        for j in range(0,newcol):
            for ii in range(0,raw):
                for jj in range(0,col):
                    newimage[i*raw+ii][j*col+jj] = output[i*newcol+j][ii][jj]

    return newimage


if __name__ == '__main__':
    inputpath = r'F:\Desktop\my_gaotietu\*'
    print(inputpath)
    # inputpath=inputpath.sort(key=lambda x: int(x.split('/')[-1].split('.')[0].split('_')[-1]))
    # print(inputpath)
    output = open_image(inputpath)

    ohhh = combine_images(output[0],1,15)  # 这个4,6的意思就是,我的图片通过那个打开的函数之后,变成了一个大的ndarray里面有24张图片,我想让他们以,行4列6,的形式组合起来。
    cv2.imwrite(r"F:\Desktop\my_gantie_save\1.jpg",ohhh)
    ohhh_1 = combine_images(output[1], 1, 15)
    cv2.imwrite(r"F:\Desktop\my_gantie_save\2.jpg", ohhh_1)
    ohhh_2 = combine_images(output[2], 1, 15)
    cv2.imwrite(r"F:\Desktop\my_gantie_save\3.jpg", ohhh_2)
    ohhh_3 = combine_images(output[3], 1, 15)
    cv2.imwrite(r"F:\Desktop\my_gantie_save\4.jpg", ohhh_3)