OpenCV で画像の読み書き

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

コメント

タイトルとURLをコピーしました