質問: (255, 0, 0): file[x,y]=1,0,0 else: file[x,y]=0,0,0 print(files) 上記のコードでおかしい点を教えていただきたいです。 よろしくお願いします。
回答: 以下の問題点があるように思います。 1. OpenCV はチャンネルの並び順が BGR なので、赤は (255, 0, 0) ではなく、(0, 0, 255) 2. numpy 配列に対して、for 文で1ピクセルずつ見ていくのは非効率 → numpy の indexing を使う。 サンプルコード ``` from pathlib import Path import cv2 import numpy as np input_dir = Path('input') output_dir = Path('output') output_dir.mkdir(exist_ok=True) before = (0, 0, 255) after = (0, 0, 1) for img_path in input_dir.iterdir(): # 画像を読み込む。 img = cv2.imread(str(img_path)) # (0, 0, 255) を (1, 0, 0) に置換する。 idx_to_replace = (img == before).all(axis=2) img[idx_to_replace] = after img[~idx_to_replace] = (0, 0, 0) # 保存する。 save_path = output_dir / img_path.name cv2.imwrite(str(save_path), img) print('{} ==> {}'.format(img_path, save_path)) ```