画像の基本操作

OpenCVBeginner

はじめに

OpenCV-Python に関するこのチュートリアルへようこそ!このチュートリアルでは、Python の OpenCV ライブラリを使った画像の基本操作について説明します。

画素値のアクセスと変更

この実験を始める前に、チャレンジャーは /home/labex/project のターミナルで Python シェルを開く必要があります。

cd /home/labex/project

python3

まずは、画像を読み込んで OpenCV を使って表示することから始めましょう。

import cv2

## 画像を読み込む
image = cv2.imread('image.jpg')

## 画像を表示する
cv2.imwrite('Original Image.jpg', image)

画素値にアクセするには、次のように座標 (x, y) を指定するだけです。

pixel_value = image[y, x]

画素値は、色チャネル (B, G, R) を含む配列です。画素値を変更するには、対応する座標に新しい値を割り当てます。

ここでは、画素 [0:9, 0:9] を赤色に設定する例を示します。

for x in range(10):
    for y in range(10):
        image[x, y] = [0, 0, 255]  ## 画素を赤色に設定する


cv2.imwrite('Modified Image.jpg', image)

元の画像は次のようになります。

変更前の元の画像

[0:9,0:9] の範囲の画素値を変更した後の画像。

変更された画素値の画像

ユーザーは、以下のコードを実行することで結果の正誤を確認できます。

画像プロパティのアクセス

画像のプロパティには、行数、列数、チャネル数、画像のデータ型、および画素の総数が含まれます。

画像の形状(行数、列数、チャネル数)にアクセするには、shape 属性を使用します。

height, width, channels = image.shape
print(height, width, channels)

## 出力
## 360 640 3

画素の総数にアクセするには、size 属性を使用します。

total_pixels = image.size
print(total_pixels)

## 出力
## 691200

画像のデータ型にアクセするには、dtype 属性を使用します。

image_dtype = image.dtype
print(image_dtype)

## 出力
## uint8

関心領域(ROI)の設定

関心領域 (ROI) は、元の画像から抽出できるサブ画像です。ROI を設定するには、始点と終点の座標を指定するだけです。

roi = image[start_y:end_y, start_x:end_x]

たとえば、左上隅から 100x100 画素の ROI を抽出するには、次のようにできます。

roi = image[0:100, 0:100]
cv2.imwrite('ROI.jpg', roi)

生成された画像 ROI.jpg は次のようになります。

ROI の例の画像

画像の分割とマージ

画像をその色チャネル (B, G, R) に分割するには、cv2.split() 関数を使用します。

b, g, r = cv2.split(image)

これで、cv2.imwrite() を使って個々のチャネルを表示できます。
チャネルを再び 1 つの画像に結合するには、cv2.merge() 関数を使用します。

merged_image = cv2.merge((b, g, r))

たとえば、赤と青のチャネルを交換するには、次のようにできます。

swapped_image = cv2.merge((r, g, b))
cv2.imwrite('Swapped Channels Image.jpg', swapped_image)

生成された画像 Swapped Channels Image.jpg は次のようになります。

赤と青のチャネルを交換

まとめ

以上です!OpenCV-Python を使った画像に関する基本的な操作を学びました。コンピュータビジョンや画像処理アプリケーションにおいて画像を扱う際には、これらは理解する重要な概念です。これらの基本操作をマスターすることで、より高度な画像処理アルゴリズムを開発する道が開けます。