今回も研究中に小一時間ほどハマってしまったので,
その悔しさを糧に投稿します.
環境について
本投稿での使用環境は,
- python 3系
- open CV
- GIMP
- png形式の画像
を用いています.
筆者がやりたかったこと
今回私は, 画像の一部分を切り抜き(マスク処理),
そこから画像の色情報等を分析しようと考えていました.
その際に, 画像処理ソフトGIMPを用いて背景を消去しています.
これが
そうすれば, 切り取った部分の色情報が入手できるんじゃないかと思ってました.
そこで, python上で色情報をヒストグラム化するコードを動かしてみました.
(ソースコードはお借りしています. 引用元→【openCV】画像の色の判別・抽出
import numpy as np
import matplotlib.pyplot as plt
import cv2
from collections import Counter
# 画像を読み込み
img_scr = cv2.imread("hoge/piyo/sorekara_dositano.png", -1)
# BGR->HSV に変換
img_hsv = cv2.cvtColor(img_scr, cv2.COLOR_BGR2HSV)
height = img_hsv.shape[0]
width = img_hsv.shape[1]
pixels = []
for y in range(height):
for x in range(width):
if (img_hsv[y, x, 1] > 45 and 32 < img_hsv[y, x, 2]):
pixels.append(img_hsv[y, x, 0])
plt.xlim(0,180)
plt.xticks([0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180])
plt.hist(pixels, bins=12, range=(0,180), align="mid",rwidth=1.0,color="blue")
bins = np.linspace(0, 180, 13)
print(bins)
index = np.digitize(pixels,bins)
c = Counter(index)
print (c)
mode = c.most_common(1)
print(mode[0][0])
そして出力されたヒストグラムは以下のようです.
ってことで赤部分だけ切り取ったはずが, ヒストグラム上では色が残ってしまっています.><
画像の透明部分には色情報が残ってた
どうやら画像処理ソフトで切り取り部分を消去しても,
根本に元の色情報が残ってしまっているというのが原因のようです.
解決策として, 一回塗りつぶしちゃう
という事で, もとの色情報を書き消すために透明部分を黒色などの
影響の出なそうな色に塗りつぶして,その後再度分析を行えばいいのではないかと思います.
(※ただ, 黒色はHSV表色系だと色相0で赤色と同じ部分に該当するので, 要注意です)
といったわけで, 分析結果がおかしいなぁとハマった症状と解決策についてでした.
(これで本当にエンジニアになれるのだろうか・・・?)