【OpenCV-Python】色を指定して新規画像データを初期化

OpenCVで、画像に線や円などを描画する際、ベースとなる画像データを色を指定して新規作成したい時があるかと思います。

 

PythonのOpenCVにはC++のMatクラスのようなものはなく、画像データはnumpyのndarrayなので、numpyの関数を使って画像データを新規作成します。

 

numpyで画像データを作成するには、

 

●すべての画像データを0で初期化する  zeros

●すべての画像データを1で初期化する  ones

●すべての画像データを指定した値で初期化する  full

 

のいずれかの関数を用いる事で、画像データの新規作成が可能になります。

 

zeros を用いる方法

zerosは画像データをすべて0で初期化します。

0で初期化した画像に、値を足すと、足した値一色の画像データとなります。

 

zerosの構文

numpy.zeros(shape, dtype=float, order='C', *, like=None)
shape 配列のサイズを指定します。
モノクロの場合:(高さ, 幅)
カラーの場合:(高さ, 幅, 3)や(高さ, 幅, 4)
dtype データの型を指定します。
画像データなので、
dtype = np.uint8
とします。
order ‘C’ もしくは ‘F’  詳細は不明。。
like 詳細は不明。。

 

サンプルプログラム

import cv2
import numpy as np

# モノクロ(黒(0))で初期化
img_mono_black = np.zeros((100, 400), dtype = np.uint8)
# モノクロ(白(255))で初期化
img_mono_white = np.zeros((100, 400), dtype = np.uint8) + 255
# カラー(黒(0))で初期化
img_color_black = np.zeros((100, 400, 3), dtype = np.uint8) 
# カラー(白(255))で初期化
img_color_white = np.zeros((100, 400, 3), dtype = np.uint8) + 255

cv2.imshow("mono_black", img_mono_black)
cv2.imshow("mono_white", img_mono_white)
cv2.imshow("color_black", img_color_black)
cv2.imshow("color_white", img_color_white)

print(img_color_black)

cv2.waitKey()

実行結果

 

ones を用いる方法

onesは画像データをすべて1で初期化します。

1で初期化した画像に、値を掛け、掛けた値一色の画像データとなります。

 

onesの構文

numpy.ones(shape, dtype=None, order='C', *, like=None)
shape 配列のサイズを指定します。
モノクロの場合:(高さ, 幅)
カラーの場合:(高さ, 幅, 3)や(高さ, 幅, 4)
dtype データの型を指定します。
画像データなので、
dtype = np.uint8
とします。
order ‘C’ もしくは ‘F’  詳細は不明。。
like 詳細は不明。。

 

サンプルプログラム

import cv2
import numpy as np

# モノクロの指定色(128)で初期化
img_mono_128 = np.ones((100, 400), dtype = np.uint8) * 128
# カラーの指定色(グレー200)で初期化
img_color_200 = np.ones((100, 400, 3), dtype = np.uint8) * 200

cv2.imshow("mono_128", img_mono_128)
cv2.imshow("color_200", img_color_200)

cv2.waitKey()

実行結果

 

full を用いる方法

fullは画像データをすべて指定した値で初期化します。

 

fullの構文

numpy.full(shape, fill_value, dtype=None, order='C', *, like=None)
shape 配列のサイズを指定します。
モノクロの場合:(高さ, 幅)
カラーの場合:(高さ, 幅, 3)や(高さ, 幅, 4)
fill_value 指定色
カラーの場合は、 (青, 緑, 赤) の順のタプルで指定します。
dtype データの型を指定します。
画像データなので、
dtype = np.uint8
とします。
order ‘C’ もしくは ‘F’  詳細は不明。。
like 詳細は不明。。

 

サンプルプログラム

import cv2
import numpy as np

# カラーの指定色(青)で初期化
img_color_blue = np.full((100, 400, 3), (255, 0, 0), dtype = np.uint8)
# カラーの指定色(緑)で初期化
img_color_green = np.full((100, 400, 3), (0, 255, 0), dtype = np.uint8)
# カラーの指定色(赤)で初期化
img_color_red = np.full((100, 400, 3), (0, 0, 255), dtype = np.uint8)

cv2.imshow("color_blue", img_color_blue)
cv2.imshow("color_green", img_color_green)
cv2.imshow("color_red", img_color_red)

cv2.waitKey()

実行結果

 

参照ページ

https://numpy.org/doc/stable/reference/generated/numpy.zeros.html#numpy.zeros

https://numpy.org/doc/stable/reference/generated/numpy.ones.html#numpy.ones

https://numpy.org/doc/stable/reference/generated/numpy.full.html

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください