python
1import numpy as np 2from PIL import Image 3 4# colabとdriveを同期 5from google.colab import drive 6drive.mount('/content/drive') 7 8# colabに、driveの1.pngという活字入力で「1」と入力したpngファイルをimg[0]に読み込み 9img = [np.array(Image.open('drive/My Drive/1.png'))] 10 11# forを使っているが、実質1回ループしているだけなので必要なし、img[0]の色を反転(1行目)後、2値化(2行目)し、横144px,縦132px(3行目)に変換。 12for i in range(1): 13 img[i] = 255 - img[i] 14 img[i] = (img[i] > 128) * 255 15 img[i].resize((144 , 132)) 16 17# 表示範囲を省略せず1900まで拡大 18np.set_printoptions(threshold=19000) 19 20# imgには画像の色情報が画像(px.png)のように格納されているが、img[0],img[1],img[2]で格納の「され方」が違うらしく、ここでは、img[2]を用いている。 21# img[2]はたぶん、画像(px.png)の一番上の行から、下に向かって順番に、1行ずつの、左から右へ向かっての各ピクセルの画像情報が、(赤色で示すように)[0],[1],[2]・・・と格納されている。つまり、img[2][0]は一番上の行の配列、img[2][1]は上から二番目の行の配列を指す。 22# この各配列の内、0でない配列を、nonzeroを用いて順にa[]に格納していっている。・・・★ 23a = [ np.nonzero(img)[2][i] for i in range(len(np.nonzero(img)[2])) if i == 0 or np.nonzero(img)[2][i] < np.nonzero(img)[2][i-1]] 24 25#配列の長さを確認 26print(len(a)) 27 28# 画像認識を行うために、計算処理が可能かどうかを行う、a[1],a[9],a[27],a[35]の値がそもそも存在しなければここでエラーが生じる。 29print((a[9]-a[1])/2) 30print((a[35]-a[27])/2) 31 32print(a[9]) 33print(a[27])
疑問:
読み込む画像が、
3.pngの時、
40
26.0
-6.0
52
12
w288h264n3.pngの時、
print((a[9]-a[1])/2)でエラー。
---> 28 print((a[9]-a[1])/2)
29 print((a[35]-a[27])/2)
30
IndexError: list index out of range
質問を書いていて気付いた事:
もしかして★にあるように、この画像であればimg[2][0]の値は全て0であるから、上一列の行の存在が「無い」事になる、
全て0の配列が多ければ多い程、行の存在が「無くなる」、つまり行が「減る」事が原因で不具合(列が減りすぎてlen(a)が小さくなりすぎる等)が生じているのでしょうか?
その場合、何らかの方法で0のみの行も、何らかの値「1」を格納する等すれば解決しますかね。
もしそうだとして、どうやるのでしょうか・・・for if lenの1文、そもそもよく分かっていません・・・。
他にも、不具合となっている理由はございますかね?
あなたの回答
tips
プレビュー