91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現多張圖片合成一張馬賽克圖片

發布時間:2021-12-28 10:38:47 來源:億速云 閱讀:197 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python如何實現多張圖片合成一張馬賽克圖片,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

圖片素材

Python如何實現多張圖片合成一張馬賽克圖片

4K高清原圖

Python如何實現多張圖片合成一張馬賽克圖片

開發環境

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如何實現多張圖片合成一張馬賽克圖片

Python如何實現多張圖片合成一張馬賽克圖片

Python如何實現多張圖片合成一張馬賽克圖片

Python如何實現多張圖片合成一張馬賽克圖片

關于“Python如何實現多張圖片合成一張馬賽克圖片”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

监利县| 屏东县| 临湘市| 扎鲁特旗| 双牌县| 龙岩市| 阜宁县| 稷山县| 阳山县| 土默特右旗| 延长县| 商城县| 涿州市| 沂源县| 咸丰县| 盐源县| 准格尔旗| 桐庐县| 当雄县| 桃园县| 喀喇| 霍州市| 鄂托克旗| 林口县| 抚顺市| 廊坊市| 石嘴山市| 万盛区| 营山县| 泗水县| 明溪县| 乌鲁木齐县| 庆城县| 荆门市| 凤山市| 梁山县| 昆明市| 高雄市| 迁西县| 揭西县| 和平县|