Lesson2: 画像のヒストグラムを表示する
Quizではなく、自習。授業で先生がやっていたので。授業ではOpenCVを使わないので自分で模索する必要がありました。
### 目標
画像のある行のヒストグラムを表示したい
### コード&結果
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('IMG_1068.jpg', 0)
# mask masked row num:50
mask = np.zeros(img.shape[:2], np.uint8) # total black
mask[1500:1550, 0:] = 255 # white
masked_img = cv2.bitwise_and(img, img, mask = mask)
# 画像のplot
plt.subplot(222), plt.imshow(img, 'gray')
plt.subplot(221), plt.imshow(masked_img, 'gray')
# histgram
hist = cv2.calcHist([img], [0], None, [256], [0,256])
hist_mask = cv2.calcHist([img], [0], mask, [256], [0,256])
# histgramのplot
plt.subplot(223), plt.plot(hist)
plt.subplot(224), plt.plot(hist_mask)
plt.xlim([0,256])
plt.show()
結果表示では、マスクされた画像(犬の胸部分)、マスク前画像、画像全体のヒストグラム、マスクされた画像のヒストグラムを表示しています。
Tip1: マスク画像を1行だけ白で後は黒というのにすると、結果表示時、白い行が潰れてしまうのに気づかず、しばらく考えました。コード内では幾らか幅を持たせた行数でマスク画像にしました。
Tip2: マスク前とマスク後のヒストグラムを同じグラフ内に表示していまうと、マスク後の値の山が、マスク前の山に隠れてしまい平らにしまいます。なので別々にplot.
### ヒストグラム表示の例
### 環境
下記を参考に。numpyはpythonコンソールでimportできたので、matplotlibをインストールします。