質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

225閲覧

配列に対するnonzero,len使用時の、何らかのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/01 13:52

編集2021/03/01 16:17

イメージ説明
3.png
イメージ説明
w288h264n3.png
イメージ説明
px.png

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文、そもそもよく分かっていません・・・。

他にも、不具合となっている理由はございますかね?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問