溫馨提示×

溫馨提示×

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

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

Python中怎么生成一個馬賽克畫

發(fā)布時間:2021-07-10 11:19:41 來源:億速云 閱讀:143 作者:Leah 欄目:大數(shù)據(jù)

這篇文章將為大家詳細講解有關(guān)Python中怎么生成一個馬賽克畫,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

import re
import os
import cv2
import numpy as np
from tqdm import tqdm

IMG_DIR = "images"

def load_all_images(tile_row, tile_col):
   img_dir = IMG_DIR
   filenames = os.listdir(img_dir)
   result = []
   print(len(filenames))
   for filename in tqdm(filenames):
       if not re.search(".jpg", filename, re.I):
           continue
       try:
           filepath = os.path.join(img_dir, filename)
           im = cv2.imread(filepath)
           row = im.shape[0]
           col = im.shape[1]
           im = resize(im, tile_row, tile_col)
           result.append(np.array(im))
       except Exception as e:
           msg = "error with {} - {}".format(filepath, str(e))
           print(msg)
   return np.array(result, dtype=np.uint8)

這里load_all_images函數(shù)的參數(shù)就是統(tǒng)一后的尺寸,tile_row和tile_col分別對應(yīng)高和寬。

下面的代碼對要轉(zhuǎn)換的圖片進行分割

img = cv2.imread(infile)
tile_row, tile_col = get_tile_row_col(img.shape)
for row in range(0, img_shape[0], tile_row):
   for col in range(0, img_shape[1], tile_col):
       roi = img[row:row+tile_row,col:col+tile_col,:]

我們將要轉(zhuǎn)換的圖片分割成一個個小方格,tile_row和tile_col是小方格的高和寬,roi存取小方格中的圖片數(shù)據(jù)。

下面是計算兩張圖片相似度的函數(shù)

from scipy.spatial.distance import euclidean
def img_distance(im1, im2):
   if im1.shape != im2.shape:
       msg = "shapes are different {} {}".format(im1.shape, im2.shape)
       raise Exception(msg)
   array1 = im1.flatten()
   array2 = im2.flatten()
   dist = euclidean(array1, array2)
   return dist

im1和im2是兩張圖片的數(shù)據(jù),圖片數(shù)據(jù)是一個三維的numpy數(shù)組,這里我們將三維數(shù)組轉(zhuǎn)換成一維數(shù)組后,比較兩者的歐式距離。之后要找出最相似的圖片,只需遍歷圖片集中所有的圖片,找到距離最短的那張圖片,去替換原圖中的小方格就可以了。

關(guān)于Python中怎么生成一個馬賽克畫就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI