您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Python如何實現多張圖片合成一張馬賽克圖片,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
圖片素材
4K高清原圖
Python 3.6
Pycharm
import cv2 import glob import argparse import numpy as np from tqdm import tqdm # 進度條 from itertools import product # 迭代器
def parsArgs(): parser = argparse.ArgumentParser('拼接馬賽克圖片') parser.add_argument('--targetpath', type=str, default='examples/3.jpg', help='目標圖像路徑') parser.add_argument('--outputpath', type=str, default='output.jpg', help='輸出圖像的路徑') parser.add_argument('--sourcepath', type=str, default='sourceimages', help='用來拼接圖像的所有源圖像文件路徑') parser.add_argument('--blocksize', type=int, default=15, help='馬賽克快的大小') args = parser.parse_args() return args
def readSourceImages(sourcepath,blocksize): print('開始讀取圖像')
設置一個列表,存放符合要求的顏色圖像
sourceimages = []
avgcolors = []
每遍歷一次,進度條走一次
for path in tqdm(glob.glob("{}/*.jpg".format(sourcepath))): image = cv2.imread(path, cv2.IMREAD_COLOR) if image.shape[-1] != 3: continue # 縮放尺寸 image = cv2.resize(image, (blocksize, blocksize)) # 圖像顏色平均值 avgcolor = np.sum(np.sum(image, axis=0), axis=0) / (blocksize * blocksize) sourceimages.append(image) avgcolors.append(avgcolor) print('結束讀取') return sourceimages,np.array(avgcolors)
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('開始制作') 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('制作完成')
if __name__ == '__main__': # run main(parseArgs())
關于“Python如何實現多張圖片合成一張馬賽克圖片”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。