こんにちは。続きをやりましょう。
グレースケール化の確認
グレースケール化までやったのでそれができてるかの確認をします。
せっかくなので、ndarrayの出力も試したいなと思って、以下のコードを書きました。
for y_num in range(0,5):
for x_num in range(0,5):
print("print["+str(y_num)+"]"+"["+str(x_num)+"]:"+str(img_gray[y_num][x_num]))
img_gray[y_num][x_num]の部分で、画素値の出力をしてます。
実行結果。
print[0][0]:251
print[0][1]:251
print[0][2]:251
print[0][3]:251
print[0][4]:251
print[1][0]:251
print[1][1]:251
print[1][2]:251
print[1][3]:251
print[1][4]:251
print[2][0]:251
print[2][1]:251
print[2][2]:251
print[2][3]:251
print[2][4]:251
print[3][0]:251
...
しっかり入ってますね。
では早速、これのヒストグラムでも書いてみましょう。
#ヒストグラム
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(img_gray)
plt.show()
参考:ヒストグラムの出し方
参考:plot関数について
多分、この一番右の多い群が白色かなぁとか思ったり。
大津の2値化を使って、やってみましょう。
2値化
#大津の2値化をって、閾値を求める+2値化
th, img_gray_th_otsu = cv2.threshold(img_gray,0,255,cv2.THRESH_OTSU)
#画像出力
plt.imshow(img_gray_th_otsu)
plt.gray()
plt.show()
thに閾値、img_gray_th_otsuに2値化後の画素値が入ります。
cv2.thresholdの引数、threshにはいったん0を入れてます。これが大津法によって最適化されてthに入ると考えてます。Maxは255にしときました。maxの画素値を入れてもいいですが、そこまでする必要はないかなと思いました。
cv2.thresholdの定義