pythonでモザイク画像を生成するプログラム作った

学習用のデータを吹き飛ばしました。つらたん。。。

先日のプログラムでは画像を読み込むだけでしたがこれに処理をして保存します。

まずはコード。

# -*- coding: utf-8 -*-
"""
モザイク画像をつくります
"""
import glob
import os
import cv2

def fileRead():
    data = {}
    for file in glob.glob('data/src/*.jpg'):
        name = os.path.basename(file)
        data.setdefault(name, cv2.imread(file, 1))
    return data

def mosaic(src, ratio=0.1):
    small = cv2.resize(src, None, fx=ratio, fy=ratio, interpolation=cv2.INTER_NEAREST)
    return cv2.resize(small, src.shape[:2][::-1], interpolation=cv2.INTER_NEAREST)

if __name__ == '__main__':
    data = fileRead()
    print ('Number of images:', str(len(data)))
    for name, img in data.items():
        print ('filename:', name)

        dst_01 = mosaic(img, ratio=0.1)
        cv2.imwrite('data/dst/' + name, dst_01)

前回のプログラムと比較して何点か変更点があります。

変更前

def fileRead():
    data = []
    for file in glob.glob('src/*.PNG'):
        data.append( cv2.imread(file, 1) )
    return data

変更後

def fileRead():
    data = {}
    for file in glob.glob('data/src/*.jpg'):
        name = os.path.basename(file)
        data.setdefault(name, cv2.imread(file, 1))
    return data

最終的にdst/に保存する必要があったのでファイル名を返す必要がありました。なのでdataはリストでなく辞書で宣言します。辞書の追加はsetdefault

肝心のモザイク処理部分はこちら丸パク参考にさせていただきました。

結果

 

 

最近githubの勉強してるので気が向いたらコード上げてみます。こんな極小規模をアップする意味はないですが…