(5)静止画像の基礎ー初めの一歩

事の初めは静止画像の取り込みと表示である。(pyopenCV_pro,pp36)。

〇取り込みと表示
# -*- coding: utf-8 -*-
import cv2

# tempデレクトリィのサンプル画像を読み込む。
img = cv2.imread('c:/temp/sample_1.jpg') 

# shapeオブジェクトは画像の各次元のサイズを取得する(タプル)。
print(img.shape) 
print(img.shape[0])
print(img.shape[1])
print(img.size)

# sample_next.jpgとして書き出す。
cv2.imwrite('c:/temp/sample_next.jpg',img)

# imgを画面に表示
cv2.imshow('view_sample_1',img)
ーーーーーーーーーーーーーーーーーーーーーー 
プログラムの実施結果は以下。

(433, 577, 3) #タプルの要素は画像の高さ(height,行数)、幅(width,列数)、チャンネル数
433 # _.shape[0]は行数(高さ)
577 # _.shape[1]は列数(幅)
749523 #_.sizeは全要素数

〇画像の生成
青い400×400の画像を作る。

import numpy as np
import cv2

# 黒一色の画面を作る。np.zerosはまだ解説できないのでいずれ記載。
img = np.zeros((400,400,3),np.uint8) # np.uint8はなくてもよい。符号なし8ビットの整数の意味。

# 配列のすべての要素にBRGで青(255,0,0)を入力。
# numpy.ndarray(N-dimensional array)は後述。
# 青はRGBでは[0,0,255]だが、openCVではBRGが標準。
img[:,:] = [255,0,0] #openCVでは標準でBRGの順で色指定になっているので注意。

# c:/tempに記録
cv2.imwrite('c:/temp/blueImage.jpg',img) 

# イメージの表示
cv2.imshow('blue_image',img) 

# 終了待ち
cv2.waitKey(0) 

# 画像の消去
cv2.destroyAllWindows() 

◯N-dimensional arrayとnp.zeros()の解説
(入Py3のpp470を参照、入Py3については2017-4-25に記載)
標準Python とNumPyの配列は全く別のものである(と書いてある)。
NumPyのnp.ndarrayによって用いられるタプルはC言語なみの高速計算が可能で、画像のような多次元数値配列を扱うために作られた。標準Python のリストやタプルとは性格が異なるため、基本的な構造を理解する必要がある。

NumPy配列では次元数を階級(rank)と呼ぶ。1次元配列は数値の行のようになり、2次元配列は 値の行列のようになる。3次元配列はルービックキューブのような構造になる。openCVでは不可欠のメソッドで、さらなる詳細は日を改めて理解しやすいように備忘録として記録したい。ここをおさえられるかどうかが画像解析の最も基本の基本だ。これを踏まえて初めて画像の回転や加工のための行列の計算に進むことができるようだ。

np.zeros()メソッドはすべての値がゼロになっている配列を返す。引数として配列の形を指定するタプルを渡せる。多次元配列のarray の中身は上述と同じである。少しだけ明日、時間をとって解説を記載する。