Pythonの学習の過程とか

学習の記録をつけておきましょう。Python3に少しずつ移行していきます。過去の記事のソースを2から3に、、、と考えましたが、新しいことをやったほうがいいですね。

OpenCV3とNumpyでブランク画像を作る

ブランク画像の作り方

用途はあまり無いと思いますが、、、黒や任意の画素値で塗りつぶした画像が欲しいことありますよね。 そういうときにお役立ちなNumpyの配列とOpenCVの画像保存のやり方です。

CreateImage Python

Numpyで配列を作り、OpenCVで保存する

考え方としてはとてもシンプルです。

  1. Numpyのzerosメソッドで0で埋められた配列を作る
  2. 適当な画素値を設定する
  3. cv2.imwriteで保存する

zerosはゼロ埋めの配列を作ります

imageArray = np.zeros((height, width, 3), np.uint8)

公式はこちら numpy.zeros — NumPy v1.13 Manual

shapeとdtypeを設定しました。

numpy.zeros(shape, dtype=float, order=‘C’)

shapeで確認できること

size = imageArray.shape[:2]

BGRのために配列は3次元で作っていますが、[:2]とすることでheight,widthを得ることができます

ここで注意しなければならないのですが、配列の「行数と列数」なので、(height,width)のタプルが返されるということです。

通常、画像を扱う時には640x480だったり、1920x1080だったり、width,heightの順番であることが多いですよね。

ここを間違えないようにしましょう。

dtypeの注意。デフォルトはfloat型

デフォルトはfloatのようですので注意しましょう。

The desired data-type for the array, e.g., numpy.int8. Default is numpy.float64.

このまま配列を画像として保存すると?

# 0で埋められた配列を画像として保存します
cv2.imwrite("blank.bmp", imageArray);

保存された画像はこちら

f:id:PeaceAndHiLight:20170814144323j:plain

地味ですね。小さい画像ですみません

適当な画素値を設定してみる

今回はBGR(128,64,32)にしてみます

for h in range(0, height):

    for w in range(0, width):

        imageArray[h, w] = [128, 64, 32]

間違えないようにしましょう、BGRです〜

改めて保存してみた画像

f:id:PeaceAndHiLight:20170814144333j:plain

地味な色を設定してしまいました。 すみません。。。。。

ということで、この手法で適当に画像を作り、色々と解析したりする準備ができると思います。

詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識

詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識

Learning OpenCV 3: Computer Vision in C++ With the OpenCV Library

Learning OpenCV 3: Computer Vision in C++ With the OpenCV Library