はじめに
PythonでOpenCVの画像データの画素値にアクセスする方法について紹介します。
画素値の取得や書き換えは、画像処理ではよく利用するので参考にしてください。
画素値とは
写真を拡大していくと、画像はいくつもの正方形の集まり構成されていることがわかります。この一つひとつの正方形を画素と言います。
カラー画像の場合は一つの画素に青、緑、赤のそれぞれの輝度の値があり、それらが画素値となります。 画素値にアクセスするには、その座標指定するだけで画素値を取得することができます。
OpenCVでは赤(R)、緑(G)、青(B)の各色データをチャンネルと呼びます。RGBのデータの並びは"B G R"となります。"R G B"の順番ではないので注意してください。
画素値を取得
画素値を取得するには、画像のチャンネル数あらかじめ知る必要があります。下のコードではカラー画像(チャンネル数 3)の例です。
また、取得した画素値はnumpy.ndarray形式です。
import cv2 # 画像を読み込み image = cv2.imread('image.jpg') # アクセスする画素のXY座標を指定 x = 100 # x座標 100ピクセルの位置 y = 200 # y座標 200ピクセルの位置 # RGBの各チャンネルのデータを一度に取得 pixel = image[x, y] # 確認のためデータを表示 print(pixel) # (結果) # [70 61 41] # 各チャンネルのデータを個別に取得 blue = image[x, y, 0] green = image[x, y, 1] red = image[x, y, 2] # 確認のためデータを表示 print(blue) print(green) print(red) # (結果) # 70 # 61 # 41
画像の読み込み方法・チャンネル数の取得については次の記事を参考にしてください。
(広告) OpenCV関連書籍をAmazonで探す画素値を書き換え
各チャンネルを一度に書き換える場合、値はnumpy.ndarray形式で入力します。
import cv2 # 画像を読み込み image = cv2.imread('image.jpg') # アクセスする画素のXY座標を指定 x = 100 # x座標 100ピクセルの位置 y = 200 # y座標 200ピクセルの位置 # RGBの各チャンネルの値を"0"に書き換え image[x, y] = [0, 0, 0] # ndarray形式 # 確認のためデータを表示 print(image[x, y]) # (結果) # [0 0 0] # 各チャンネルのデータを個別に"0"に書き換え image[x, y, 0] = 0 # 青 image[x, y, 1] = 0 # 緑 image[x, y, 2] = 0 # 赤 # 確認のためデータを表示 print(image[x, y, 0]) # 青 print(image[x, y, 1]) # 緑 print(image[x, y, 2]) # 赤 # (結果) # 0 # 0 # 0
最後までご覧いただきありがとうございました。
■(広告)OpenCVの参考書としてどうぞ!■
リンク
リンク
参考リンク
OpenCV: Operations with images