最近、業務で画像を扱うことが多くなってきた。
データの扱い方が今までのlistや、Dictoinaryといったものとは大きく違ってきた。
今回は、データの扱いでnumpyではまったことを記述
numpyのarrayのサンプルとして画像をグレースケール読み込む
import cv2
np_img = cv2.imread(“aaa.jpg”, 0)
numpyの条件を取得(真っ白の箇所を抽出)
np_white = np_img == 255
①画像の一部を変更(画像の上 100pxを黒くする)
np_img[:100] = 0
↑ np_imgの値は変わります
②真っ黒だった箇所を真っ白に変更
np_img[np_white] = 0
↑ np_imgの値は変わります
③画像の上100pxの中でもともと真っ白だった箇所を真っ白に変更
np_img[np_white][:100] = 255
↑ np_imgの値が変わりません
④画像の上 100pxの中で
np_condition_100 = np_condition[:100]
np_img[:100][np_condition_100] = 100
↑ np_imgの値が変わります
実験結果:
test1 = np_img[np_white]
test1[0] = 255
test1は1次元の配列で取得され np_imgの値は変わりません
test2 = np_img[:100]
test2は2次元の配列で取得される
test2[0,0] = 255
test2は2次元の配列で取得され np_imgの値がかわります
代入する時の挙動が違ったんですね。。。