Get the App
SLTechnology News&Howtos  ›  Development  › 

How to compose multiple pictures into a mosaic picture by Python

Shulou Source: shulou.com Published: 2022-06-02 05:03:41 09月27日 Update

This article will explain in detail how Python can synthesize multiple images into a mosaic image. Xiaobian thinks it is quite practical, so share it with you as a reference. I hope you can gain something after reading this article.

picture material

4K HD original

development environment

Python 3.6

Pycharm

import cv2import globimport argparseimport numpy as npfrom tqdm import tqdm #progress bar from itertools import product #iterator reads image file def parsArgs(): parser = argparse.ArgumentParser ('mosaic picture') parser.add_argument ('--targetpath', type=str, default ='examples/3.jpg ', help ='target image path') parser.add_argument ('--outputpath', type=str, default ='output.jpg ', help ='output image path') parser.add_argument ('--sourcepath', type=str, default ='sourceimages ', help ='all source image file paths used to stitch images') parser.add_argument ('--blocksize', type=int, default=15, help ='mosaic block size') args = parser.parse_args() return args Read all source images and calculate the color average def readSourceImages(sourcepath,blocksize): print ('Start reading image') List of legal images

Set up a list of color images that meet the requirements

sourceimages = [] averagecolorlistavgcolors = [] traversal

Every time you traverse, the progress bar goes once

for path in tqdm(glob.glob("{}/*.jpg".format(sourcepath))): image = cv2.imread(path, cv2.IMREAD_COLOR) if image.shape[-1] != 3: continue #Scale size image = cv2.resize(image, (blocksize, blocksize)) #Image Color Average avgcolor = np.sum(np.sum(image, axis=0), axis=0) / (blocksize * blocksize) sourceimages.append(image) avgcolors.append(avgcolor)print ('finish reading') return sourceimages,np.array(avgcolors) main function def main(args): targetimage = cv2.imread(args.targetpath) outputimage = np.zeros(targetimage.shape,np.uint8) # int8 int16 int32 int64 sourceimages,avgcolors = readSourceImages(args.sourcepath,args.blocksize) print ('Start Production') for i, j in tqdm(product(range(int(targetimage.shape[1]/args.blocksize)), range(int(targetimage.shape[0]/args.blocksize)))): block = targetimage[j * args.blocksize: (j + 1) * args.blocksize, i * args.blocksize: (i + 1) * args.blocksize,:] avgcolor = np.sum(np.sum(block, axis=0), axis=0) / (args.blocksize * args.blocksize) distances = np.linalg.norm(avgcolor - avgcolors, axis=1) idx = np.argmin(distances) outputimage[j * args.blocksize: (j + 1) * args.blocksize, i * args.blocksize: (i + 1) * args.blocksize, :] = \ sourceimages[idx] cv2.imwrite(args.outputpath, outputimage) cv2.imshow('result', outputimage) print ('finished ') module call execution if __name__= '__main__': # run main(parseArgs()) Full effect

About "Python how to achieve multiple images into a mosaic image" This article is shared here, I hope the above content can be of some help to everyone, so that you can learn more knowledge, if you think the article is good, please share it for more people to see.

Tags: Pictures images mosaics Marseilles colors articles paths multiple average files more modules progress production good legal practical code content function Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno MariaDB Shulou Technology Docker Redmi Microsoft