はじめに
PythonでOpenCVを使ったカラー画像の色の分割と分割された色を結合する方法について紹介します。
カラー画像の色を分割
スマホやデジカメで撮影したカラー写真は「赤」、「青」、「緑」の3つの成分で構成されています。これらの各色をチャンネルと呼びます。デジカメやスマホなどで撮影したカラー写真は「赤」、「青」、「緑」の3チャンネルで構成されています。cv2.split
関数を使うと、これら各チャンネルを別々の画像として取り出すことができます。
cv2.split関数
引数
名称 | 説明 |
入力画像(必須) | 色の分割をする入力画像 |
戻り値
分割されたチャンネルのタプル型。順番は青、緑、赤。
使い方
引数の入力画像を色を分割する例です。
import cv2 # 画像を読み込み image = cv2.imread('image.jpg') # 色の分割 blue, green, red = cv2.split(image)
分割した結果、下の様になります。
OpenCVではチャンネルが格納される順番は「青」、「緑」、「赤」となっているため、戻り値の順番も「青」、「緑」、「赤」となります。
画像の読み込みに関してはこの記事を参考にして頂けると嬉しいです。
画像の結合
merge
関数は複数の単一チャンネル画像を単一の多チャンネル画像に結合するために使用されます。
cv2.merge関数
引数
名称 | 説明 |
mv(必須) | 単一チャンネル入力画像のタプル。タプルの長さがチャンネルの数となります。タプルの順序は、出力画像におけるチャンネルの順序を決定します。 表記例:(green, red, blue) |
戻り値
結合された画像データ
使い方
分割されたチャンネルのデータを結合し、元のカラー画像に戻します。merge
関数に「青」、「緑」、「赤」の順番でデータを渡します。
import cv2 # 3つのグレースケール画像を読み込みます。 blue = cv2.imread('blue.png', 0) green = cv2.imread('green.png', 0) red = cv2.imread('red.png', 0) result = cv2.merge((blue, green, red)) # 結合された画像を保存します。 cv2.imwrite('rgb_image.png', result)
次のコードでは色の順番を「緑」、「赤」、「青」に変更して結合します。
import cv2 # 3つのグレースケール画像を読み込みます。 blue = cv2.imread('blue.png', 0) green = cv2.imread('green.png', 0) red = cv2.imread('red.png', 0) result = cv2.merge((green, red, blue)) # 結合された画像を保存します。 cv2.imwrite('rgb_image2.png', result)
最後までご覧いただきありがとうございました。
■(広告)OpenCVの参考書としてどうぞ!■
リンク
リンク
参考リンク
OpenCV: split()
OpenCV: merge()