指定範囲内の数値の個数を抜き出したいのに抜き取れない。
*すいませんreturnのインデント間違っていたので直しました。
python
1# PILで開いたうえでデータをNumpy形式にする 2# (例えばJPEGは圧縮されていてNumpyな配列になっていないので、 3# そこからNumpyのデータ空間(?)に持ってくる必要がある) 4reiimg = Image.open("drive/My Drive/mnist_dataset/rei.jpg") 5reiimg = reiimg.resize((10, 10)) 6reiimg = np.asarray(reiimg) 7 8def extract(x, y): 9 # カラー画像の時Gだけ抜き取りたい 10 if len(x.shape) == 3: 11 h, w, ch = x.shape 12 13 # RGBのGだけ抜き取りたい 14 return x[:,:,y] 15 16v_max, v_min = 300, 200 17 18#g 19img_g = extract(reiimg, 1) 20 21imgrows, lenrows, imgcolumns, lencolumns = [], [], [], [] 22 23print(img_g) 24 25def diff(x): 26 for (img, imgt) in zip(x, x.T): 27 rows = img[(v_min<img)&(v_max>img)] 28 columns = imgt[(v_min<imgt)&(v_max>imgt)] 29 imgrows.append(rows) 30 lenrows.append(len(rows)) 31 imgcolumns.append(columns) 32 lencolumns.append(len(columns)) 33 return lenrows + lencolumns
上の行列から一行ずつ、そして一列ずつ、200~300の間の数値の個数を抜き取りたいのですが、
この出力結果が
[5, 2, 0, 0, 0, 1, 5, 4, 4, 4, 4, 3, 2, 2, 2, 0, 3, 3, 3, 3]
[5, 2, 0, 0, 0, 1, 5, 4, 4, 4, 6, 5, 1, 1, 1, 1, 5, 0, 4, 4, 4, 3, 2, 2, 2, 0, 3, 3, 3, 3, 7, 3, 3, 3, 3, 1, 2, 2, 2, 2]
[5, 2, 0, 0, 0, 1, 5, 4, 4, 4, 6, 5, 1, 1, 1, 1, 5, 0, 4, 4, 5, 0, 4, 8, 8, 2, 5, 3, 10, 10, 4, 3, 2, 2, 2, 0, 3, 3, 3, 3, 7, 3, 3, 3, 3, 1, 2, 2, 2, 2, 5, 5, 8, 7, 6, 4, 5, 5, 5, 5]
[5, 2, 0, 0, 0, 1, 5, 4, 4, 4, 6, 5, 1, 1, 1, 1, 5, 0, 4, 4, 5, 0, 4, 8, 8, 2, 5, 3, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 2, 2, 2, 0, 3, 3, 3, 3, 7, 3, 3, 3, 3, 1, 2, 2, 2, 2, 5, 5, 8, 7, 6, 4, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
・・・
となり、どんどん増えていってます、なぜでしょう、行と列は一緒で、
RGBの各リストの大きさは同じだから、出力されるリストの大きさも同じになるはずなんですが・・・。
ちなみにgとbを逆にすると、今度はbのリスト数が小さくなり、gのリストが大きくなります、大きさが交換されます。
ちなみに上2つのリストについてなんですが、
一番上のリストは問題なく実行されていて、問題の2番目ですが、これは、
[5, 2, 0, 0, 0, 1, 5, 4, 4, 4,
6, 5, 1, 1, 1, 1, 5, 0, 4, 4,
4, 3, 2, 2, 2, 0, 3, 3, 3, 3,
7, 3, 3, 3, 3, 1, 2, 2, 2, 2]
まぁこんな風に分割できて、この一番上と上から3番目は、それぞれbの行と列に対する正しい実行結果なのですが、
上から二番目と四番目は、先程の、gのそれぞれ行と列の実行結果なんですよね、
なんでこんなごちゃまぜになっちゃったんでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/21 18:25