Ubuntuで画像編集するはGIMPが王道だが、後に取り組みたいことを踏まえ、敢えてopenCVを使ってみる。まずは、画像の読み書きについて。
作成したコードの概要
img = cv2.imread(入力ファイル名) で画像を変数imgに格納する。cv2.imwrite(出力ファイル名,画像データ) で出力する。cv2をimportすれば、これだけで画像の読み書きができる。簡単だ。
せっかくなので、実際のデータを編集する仕組みを作る。関数 mkimgを定義し、ここで画像を加工する。今回は b2r 関数を定義し、画像の青と赤を入れ替えてみた。後で使いやすいように、file_name = sys.argv[1] で、コマンド実行時にファイル名を渡せるようにしておく。
コード
import cv2
import sys
import numpy as np
# 画像を加工する
def mkimg(img):
img2 = b2r(img)
return img2
# blueとredの入れ替え
def b2r(img):
b1,g1,r1 = cv2.split(img)
return cv2.merge((r1,g1,b1))
file_name = sys.argv[1]
img = cv2.imread(file_name)
img2 = mkimg(img)
cv2.imwrite(file_name.replace(".",".out."),img2)
画像編集前後
フォルダの画像を一括編集する
先程の python コードを mkpic.py というファイル名で保存し、下記の bash スクリプトで同フォルダのJPGファイルを全部加工する仕組みで運用する。
こうしておけば、例えば自分らしい画像フィルターを作り、それを多くの画像に適用してみる際に簡単だ。
#!/bin/bash
IFS=$'\n'
for file_name in `ls | grep JPG | grep -v out` ;do
echo $file_name
python3 mkpic.py "${file_name}"
done
コメント