Python OpenCVの基礎 画素へのアクセス
Numpyによる画素へのアクセス
画像を読み込むことは前回まででOKですね。
それでは今回もこちらを参考にしながら勉強してまいります
OpenCV: Basic Operations on Images
画像を読み込んで、任意の画素の値をみてみよう
前回の記事でやったように、画像を読み込みます
peaceandhilightandpython.hatenablog.com
画素へのアクセスは単に座標を指定するだけです
pixelValue = img[Y座標, X座標]
画素へのアクセス
#coding: utf-8 import cv2 import numpy as np # readImage img = cv2.imread('sample.jpg') pixelValue = img[10, 20] print 'pixelValue = ' + str(pixelValue)
画像を読み込んで、y座標10, x座標20の画素のBGR値を取得します。
RGBではなくBGRであるところに注意ですね!
結果
pixelValue = [172 209 235]
- B:172
- G:209
- R:235
という結果になりました。簡単ですね。
ここで疑問なのは、img[y,x]が返したpixelValueの型は何なのかということですね。 というかそもそもimgは?
試しにtype()で見てみましょう。
imgやpixelValueの型は何でしょう?
print type(img) print type(pixelValue)
結果
type 'numpy.ndarray'
type 'numpy.ndarray'
numpy.ndarrayということでした。ndarrayはnampyの基本的な配列の事になります。 詳しくは以下を参照されたし。
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
画素を色ごとに取得する
pixelValue = img[Y座標, X座標, 色]
色は0:B 1:G: 2:R
blue = img[10, 20, 0] green = img[10, 20, 1] red = img[10, 20, 2] print 'blue = ' + str(blue) print 'green = ' + str(green) print 'red = ' + str(red) print type(blue)
BGRを一括で取得していた時にはimg[y, x]でしたが、色を指定することで、色ごとの画素値を取得することができました。
blue = 172
green = 209
red = 235
type 'numpy.uint8'
一括取得のときと同じ結果です。
このとき、numpy.ndarrayからnumpy.uint8になっているようですね。
Numpyのメソッドを使って画素を取得する
これまでにimg[y, x]はいいのですが、やっぱり遅いみたいです。Speedを測っていないのですが、画像内の特定の画素値を検索していくような処理を入れたらかなりイライラするかも?
そこでNumpyのメソッドを使っていきます。こんな感じで使えるみたいです。
blue = img.item(10, 20, 0) green = img.item(10, 20, 1) red = img.item(10, 20, 2) print 'blue = ' + str(blue) print 'green = ' + str(green) print 'red = ' + str(red) print type(blue)
結果
blue = 172
green = 209
red = 235
tupe 'int'
同じ結果を得ることができました。良かったですね。しかし、型はintになっています。このあたりは間違えやすいかもしれないですね。要注意です。
画素の書き換え
画素単位で値を書き換えたい場合はどうしましょう?これもアクセスの延長のような感じでできます。しかし、ちょっぴり時間がかかるかもしれないですね。
配列による書き換え
色ごとの書き換え
img[10, 20, 0] = 255 img[10, 20, 1] = 255 img[10, 20, 2] = 255
画素の一括書き換え
img[10, 20] = [255, 255, 255]
メソッドによる書き換え
ここでもNumpyのメソッドを使うことができます。
色ごとの書き換え
img.itemset(10, 20, 0), 255)
これで同じ結果を得ることができます。一括書き換えの方法が、、、、ちょっと分かりませんでした、すみません。
今回のコードはコチラ
今回はこれまで!
詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識
- 作者: Gary Bradski,Adrian Kaehler,松田晃一
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/08/24
- メディア: 単行本(ソフトカバー)
- 購入: 17人 クリック: 272回
- この商品を含むブログ (34件) を見る