3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[OpenCV]imreadで返される配列について

Last updated at Posted at 2020-02-16

1.背景

ディープラーニングを用いて顔を認識するプログラムを作成していた際に,顔だけが映った画像を用意しなければならなかった.手法としては,人物が映った画像から,顔を検知し,その部分を切り取った.その際,OpenCVのimreadメソッドで返される配列を利用して,切り取った.この記事では,imreadで返される配列について解説する.

2.imreadとは

image = imread('sample.jpg')のように,引数に読み込む画像を指定することで,ファイルから画像を読み込むことができる関数である.この際,imageには,imreadによってsample.jpgの各画素の画素値(RGB値)が格納されている.
実際に,以下のようなプログラムを実行して,確認してみる.

imread_test.py
import cv2

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

#imreadで返された配列を出力
print(image)
	
#読み込んだ画像を表示する
cv2.imshow('img',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

出力は以下のようになる.
2020-02-16 (2).png
このように,3次元配列が出力されていることがわかる.この配列をA×B×3次元配列とする.Aは画素の行数であり,Bは画素の列数である(読み込む画像のサイズによって,行列のサイズは変わるため変数A,Bとした).3は,RGBの輝度である.
上の画像において,輝度が縦に大量に並んでいるが,これは
[[[0行0列目の輝度]~[0行B列目の輝度]]~[[A行0列目の輝度]~[A行B列目の輝度]]]の順に並んでいる.(画像において0行0列目は,左上)
よって,imreadで返される配列とは,画素の輝度を行列の順に格納したものである.
#3. 余談(画像をどう切り取るか)
1章の背景でも,説明したように,imreadで返される配列を利用して顔画像を切り取った.まず,検出した顔画像の左上の位置と,右下の位置を取得する.そして,imreadで返された配列の,顔画像の部分(顔画像の左上の行列から,右下の行列までの区分行列の輝度)だけを取り出すことで,切り取ることができた.詳細は,別の記事で説明しようと思う.

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?