2022年5月8日日曜日

【OpenCV】画像の生成

 画像処理ライブラリOpenCVの画像はNumpyndarray形式なので、画像を新規に生成する場合ndarrayを作成すればよい


OpenCV、Numpyを使うにはインポートが必要。
OpenCV

import cv2

Numpyは、しばしば次のようにnpと略されてインポートされる。

import numpy as np



1. グレースケール画像の生成

 グレースケール画像は0-255の256画素値の1チャンネル画像。全要素の値が0のndarrayを生成するnumpy.zeros、全要素の値が1のndarrayを生成するnumpy.ones、全要素が任意の値となるndarrayを生成するnumpy.fill等により生成する。

 numpy.zerosで幅400ピクセル高さ250ピクセルの黒い画像(画素値0)を生成する例。OpenCVの画像フォーマットは(高さのピクセル数、幅のピクセル数、チャンネル数)でグレースケール画像はチャンネル数が1なので引数に(250, 400, 3)を指定する。またdata-typeとして符号なし8ビット整数のデータ型を指定する引数、numpy.uint8を指定する。

import numpy as np
import cv2

img = np.zeros((250, 400, 1), np.uint8)

cv2.imwrite('img.jpg', img)

実行結果





 numpy.zerosで生成した全要素の値が0のndarrayに100を加算し、全要素が100のndarrayとして灰色の画像を作成する例

import numpy as np
import cv2

img = np.zeros((250, 400, 1), np.uint8)+100

cv2.imwrite('img.jpg', img)

実行結果





 全要素の値が1のndarrayを生成するnumpy.onesを使用する例。

import numpy as np
import cv2

img = np.ones((250, 400, 1), np.uint8)*200

cv2.imwrite('200.jpg', img)

実行結果





 全要素が任意の値を持つndarrayを生成するnumpy.fullを使用する例。引数にはndarrayの形状の他、要素の値(ここでは150)を指定する。

import numpy as np
import cv2

img = np.full((250, 400, 1), 150, np.uint8)

cv2.imwrite('img.jpg', img)

実行結果





2. カラー画像の生成

 カラー画像ではチャンネル数がB(青)、G(緑)、R(赤)の3チャンネルとなるため、(高さのピクセル数、幅のピクセル数、チャンネル数3)ndarrayを生成すればよい。また、チャンネル別の値はインデクシングで設定できる。
幅400高さ250ピクセルの3チャンネルの画像を生成しBチャンネルの画素値を100、Gチャンネルの画素値を250、Rチャンネルの画素値を30とする例。

import numpy as np
import cv2

img = np.zeros((250, 400, 3), np.uint8)

img[:, :, 0] = 100  # Bチャンネルの値を100
img[:, :, 1] = 250  # Gチャンネルの値を250
img[:, :, 2] = 30  # Rチャンネルの値を30

cv2.imwrite('img.jpg', img) 

実行結果





3. リファレンス

Numpy > numpy.zeros
Numpy > numpy.ones
Numpy > numpy.full

使用したバージョン:Python 3.10.4 / OpenCV 4.5.5

0 件のコメント:

コメントを投稿