見出し画像

グレースケールへの焼き増しをやろうとしたら失敗しました!!

import cv2
import os
import glob

def colorize_grayscale(grayscale_path, color_path, output_path):
    try:
        grayscale_img = cv2.imread(grayscale_path, cv2.IMREAD_GRAYSCALE)
        color_img = cv2.imread(color_path)

        if grayscale_img is None:
            print(f"Error: Could not read grayscale image from {grayscale_path}")
            return False

        if color_img is None:
            print(f"Error: Could not read color image from {color_path}")
            return False

        # カラー画像をグレースケール画像のサイズにリサイズ
        grayscale_img_size = (grayscale_img.shape[1], grayscale_img.shape[0])
        color_img_resized = cv2.resize(color_img, grayscale_img_size)

        grayscale_img_3c = cv2.cvtColor(grayscale_img, cv2.COLOR_GRAY2BGR)
        hsv_color_img = cv2.cvtColor(color_img_resized, cv2.COLOR_BGR2HSV)
        hsv_grayscale_img = cv2.cvtColor(grayscale_img_3c, cv2.COLOR_BGR2HSV)

        hsv_grayscale_img[..., 0] = hsv_color_img[..., 0]
        hsv_grayscale_img[..., 1] = hsv_color_img[..., 1]

        colored_grayscale_img = cv2.cvtColor(hsv_grayscale_img, cv2.COLOR_HSV2BGR)

        cv2.imwrite(output_path, colored_grayscale_img)
        print(f"Successfully processed and saved: {output_path}")
        return True
    except Exception as e:
        print(f"Error processing images {grayscale_path} and {color_path}: {e}")
        return False

def process_directory(grayscale_path, color_dir, output_dir):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"Created output directory: {output_dir}")

    color_images = glob.glob(os.path.join(color_dir, '*'))
    if not color_images:
        print(f"No color images found in directory: {color_dir}")
        return

    for i, color_path in enumerate(color_images):
        file_extension = os.path.splitext(color_path)[1]
        output_path = os.path.join(output_dir, f'output_{i}{file_extension}')
        success = colorize_grayscale(grayscale_path, color_path, output_path)
        if not success:
            print(f"Failed to process: {color_path}")

if __name__ == "__main__":
    grayscale_image_path = '/home/owner/colorize_grayscale/monochrome.png'
    color_images_dir = '/home/owner/colorize_grayscale/画像画像'
    output_dir = '/home/owner/colorize_grayscale/新規作成'
    process_directory(grayscale_image_path, color_images_dir, output_dir)

一見なんの問題も無さそうなコードですが、実は失敗してます。

こちらにも掲載しましたが、恐らくライブラリやデフォルトコードの設定で既にバグが起きてるレベルの失敗です。

画像を作ってみると分かりますが、生成結果が割と暗めになります。一から理論を構築しないといけません。

上記マガジンの18~41を見れば、納得すると思います。

ちなみに、暗い心情を表現したい場合は、こちらを利用するのも悪くはないでしょう。ただ、芸術的価値があるかどうかはなんとも言えません。

この記事が参加している募集

note限定で、みんなのフォトギャラリーに無償で大量の画像を順次UPする予定です!ですが、ペタバイトクラスで供給するとなると、容量が一杯になり、皆さんのサポートが必要となります!これからも画像をどんどん供給していくので、サポートをお願いします!