【Python・OpenCV】色の分割と結合(cv2.split, cv2.merge)

※当サイトではアフィリエイト広告を利用しています

Python プログラミング 画像処理

【Python・OpenCV】色の分割と結合(cv2.split, cv2.merge)

2023-03-21

はじめに

PythonでOpenCVを使ったカラー画像の色の分割と分割された色を結合する方法について紹介します。

カラー画像の色を分割

スマホやデジカメで撮影したカラー写真は「赤」、「青」、「緑」の3つの成分で構成されています。これらの各色をチャンネルと呼びます。デジカメやスマホなどで撮影したカラー写真は「赤」、「青」、「緑」の3チャンネルで構成されています。
cv2.split関数を使うと、これら各チャンネルを別々の画像として取り出すことができます。

cv2.split関数

blue, green, red = cv2.split(入力画像)

引数

名称説明
入力画像(必須)色の分割をする入力画像

戻り値

分割されたチャンネルのタプル型。順番は青、緑、赤。

使い方

引数の入力画像を色を分割する例です。

入力画像として、この画像を使用しました。

引用元
https://unsplash.com/photos/VTvnoNBowZs

import cv2

# 画像を読み込み
image = cv2.imread('image.jpg') 
# 色の分割
blue, green, red = cv2.split(image)

分割した結果、下の様になります。
OpenCVではチャンネルが格納される順番は「青」、「緑」、「赤」となっているため、戻り値の順番も「青」、「緑」、「赤」となります。

ポイント

分割された各チャンネルはグレースケールの画像として扱われます。

ポイント

cv2.split関数は元の画像を変更するわけではなく、分割された各チャンネルは元の画像からコピーされたものです。

画像の読み込みに関してはこの記事を参考にして頂けると嬉しいです。

画像の結合

merge関数は複数の単一チャンネル画像を単一の多チャンネル画像に結合するために使用されます。

cv2.merge関数

cv2.merge(mv)

引数

名称説明
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)

ポイント

cv2.merge関数は、タプルで渡された画像データを結合します。タプルの各要素は、結合された画像の1つのチャンネルを表します。

ポイント

cv2.merge関数にタプルで渡される画像データは画像サイズが同じである必要があります。

最後までご覧いただきありがとうございました。

■(広告)OpenCVの参考書としてどうぞ!■

参考リンク

-Python, プログラミング, 画像処理
-