Python-OpenCVでグレイスケール画像をカラーに変換【GRAY2RGBA一括変換】

コンピュータ

OpenCVのcvtColorを使って8bitのグレースケール画像を32bitのRGBAにフォーマットを変換します。

元がグレースケールの8bitですのでRGBAに変換しても見た目はグレースケールのままです。ファイルサイズ的には8bitのグレースケールが有利ですが、ペイントソフトで加工することを考えるとアルファチャンネル付きのカラー画像の方が都合が良い場面があります。対象画像が少数であればペイントソフトなどで変換しても良いですが、多量にある場合を想定してディレクトリ内の画像を一括変換するスクリプトを作成してみました。

スクリプト

import cv2
import numpy as np
import os
import glob

def filter(src_file, dst_file):
    print(src_file, dst_file)

    src = cv2.imread(src_file, 0)

    tmp = src.copy()

    dst = cv2.cvtColor(tmp, cv2.COLOR_GRAY2RGBA)
    print(dst.shape)
    cv2.imwrite(dst_file, dst)

if __name__ == '__main__':
    list = ['対象ディレクトリ']

    for src_dir in list:
        dst_dir = src_dir

        for s in sorted(glob.glob(os.path.join(src_dir, '*.png'))):
            dn = os.path.dirname(s)
            fn = os.path.basename(s)
            bn, ext = os.path.splitext(fn)
            d = os.path.join(dst_dir, bn + '.png')

            filter(s, d)

実行

スクリプト内の’対象ディレクトリ’実行環境に合わせて変更してください。配列の要素としてディレクトリのパス文字列をセットしますが、要素数を増やすことで複数のディレクトリを一括変換することも出来ます。
また、対象ファイルの種類(拡張子)はpngにしています。こちらも目的に合わせて変更することになります。

コメント