PythonとOpenCVでjpeg画像をpngに変換するスクリプト

python コンピュータ

内容としてはjpegファイル読み込み→グレイスケール化→バイラテラルフィルタ→png形式で保存しています。

途中のバイラテラルフィルタはjpegのモスキートノイズの軽減を狙っています。オプションの数値は適時調整することになります。

#!/usr/bin/env python3
# coding: utf8

# 
# jpegファイルをpngに変換
# 

import os
import sys
import glob
import cv2

def jpeg_to_png(in_path, out_path):
    print("jpeg_to_png:{} {}".format(in_path, out_path))
    img = cv2.imread(in_path, cv2.IMREAD_GRAYSCALE) # カラーの場合, cv2.IMREAD_GRAYSCALEを削る
    bi = cv2.bilateralFilter(img, 1, 20, 20)
    cv2.imwrite(out_path, bi)


if __name__ == '__main__':
    in_path = "./"
    out_path = "./png/"
    args = sys.argv
    length = len(args)
    in_path = args[1] if length > 1 else in_path
    out_path = args[2] if length > 2 else out_path
    if (os.path.basename(out_path) == "" and not os.path.isdir(out_path)):
        # ディレクトリ作成
        os.mkdir(out_path)
    if (os.path.isfile(in_path)):
        # ファイルモード
        if (os.path.basename(out_path) == ""):
            name = os.path.splitext(os.path.basename(in_path))[0] + ".png"
            o = os.path.join(out_path, name)
        jpeg_to_png(in_path, o)
    else:
        # ディレクトリモード
        s = in_path + "*.jp*g"
        for f in glob.glob(s):
            name = os.path.splitext(os.path.basename(f))[0] + ".png"
            o = os.path.join(out_path, name)
            jpeg_to_png(f, o)

コメント