Pythonによる画像処理100本ノック#1 チャネル入れ替え


はじめに

どうも、らむです。
突然ですが私は画像処理系の研究室に所属しています。私の研究室では来月から後輩にゼミで画像処理手法について教えていかなければなりません。

正直最近勉強不足で基本的な画像処理の実装や説明ができない気がします。そこでimori_imoriさんの画像処理100本ノックをやってみることにしました。

ここでは1本ずつ画像処理を実装し軽く解説していこうと思います。なお、pythonは最近始めたばかりなのでコーディング力はお察しください。

1本目:チャネル入れ替え

記念すべき1本目の画像処理はチャンネル入れ替えです。
カラー画像には赤・青・緑の3色成分、つまり3チャネルの成分が存在します。
openCVを用いて読み込むと青・緑・赤の順番になりますが、今回はこれを赤・緑・青の順番に入れ替えます。

reverseChannel.py
import cv2
import matplotlib.pyplot as plt


def reverseChannel(img):
  # 画像コピー
  dst = img.copy()
  # チャネル入れ替え
  dst[:, :, 0] = img[:, :, 2]
  dst[:, :, 2] = img[:, :, 0]

  return dst


# 画像読込
img = cv2.imread('image.jpg')

# チャネル入れ替え
img = reverseChannel(img)

# 画像保存
cv2.imwrite("result.jpg", img)
# 画像表示
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

 

画像左は入力画像、画像右は出力画像です。
赤成分と青成分が入れ替わったことによって刺し身の赤色が青色に変わっています。

おわりに

このような感じでアウトプットしていこうと思います。もし、質問がある方がいらっしゃれば気軽にどうぞ。
ちなみに、画像処理100本ノック公式サイトのGithubに公式の解答が載っているので是非そちらも確認してみてください。