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

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

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

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

1368閲覧

numpyで画像の分割と連結

退会済みユーザー

退会済みユーザー

総合スコア0

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2021/05/13 12:43

編集2021/05/14 15:22

読み込んだ画像を100100にresizeしたのですが、これを
10
10の画像10個に分割したいのですが、その方法が分かりません。

Qiitaの
画像の分割と連結
https://qiita.com/ka10ryu1/items/015c6a6a5fa287a47828
という記事に、画像等分割のコードが書かれていたのですが、そのまま貼りつけても動きません。コードは以下になります。

python

1  import numpy as np 2 3 v_size = img.shape[0] // size * size 4 h_size = img.shape[1] // size * size 5 img = img[:v_size, :h_size] 6 7 v_split = img.shape[0] // size 8 h_split = img.shape[1] // size 9 out_img = [] 10 [out_img.extend(np.hsplit(h_img, h_split)) 11 for h_img in np.vsplit(img, v_split)]

出力結果として[None]が大量に出力されるだけです。

自分はGoogleColaboratoryで使いたいので、Colabでも使えるようにし、かつ回答を少し参考に一部いじったコードが以下です。

python

1from google.colab import drive 2drive.mount('/content/drive') 3 4import sys 5import numpy as np 6 7sys.path.append('/content/drive/My Drive') 8 9import ActivationFunction as AF 10from PIL import Image 11 12tefilename = "test2.png" 13teimg = Image.open("drive/My Drive/mnist_dataset/" + tefilename) 14teimg = teimg.resize((100, 100)) 15img = np.asarray(teimg) 16 17v_size = img.shape[0] 18h_size = img.shape[1] 19img = img[:v_size, :h_size] 20 21v_split = img.shape[0] 22h_split = img.shape[1] 23out_img = [] 24[out_img.extend(np.hsplit(h_img, h_split)) 25 for h_img in np.vsplit(img, v_split)] 26 27print(out_img)

出力結果は、
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
[array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]], dtype=uint8), array([[[255, 255, 255]]],・・・(略)

となります。

たぶん、

python

1[out_img.extend(np.hsplit(h_img, h_split)) 2 for h_img in np.vsplit(img, v_split)]

の部分を、そもそも変更する必要があると思うのですが、どう変更すれば良いのか分かりません。
extendはリストに引数を追加するもので、これをリスト内に入れているのがおかしいと思うのですが、
ではforを用い、縦横分割はどのように記述すれば良いのか、よく分かりません。

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

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

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

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

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

can110

2021/05/13 12:47

「縦横分割」とはなんでしょうか?
can110

2021/05/13 13:18

どこでいくつに分割したいのでしょうか?
退会済みユーザー

退会済みユーザー

2021/05/13 13:54

とりあえずサイズが(100,100)なんで、 縦に10個、横に10個、 10ピクセルの正方形を10個、ですかね。
can110

2021/05/13 13:57

元のプログラムも同じ感じに分割するものですか?
退会済みユーザー

退会済みユーザー

2021/05/13 14:40

そのはずです、画像を見る限り。
退会済みユーザー

退会済みユーザー

2021/05/13 21:38

おはようございます。 問題文拝見いたしました。 問題の切り分けを行いたいので、 teimg = Image.open("drive/My Drive/mnist_dataset/" + tefilename) teimg.show() で画像表示されるか、ご確認いただけますでしょうか?????‍♂️
quickquip

2021/05/13 23:52 編集

コードでは「何も出力していない」(print文もなければ、ファイルに保存しているわけでもない)のですが、出力とは何のことを指しているのか書いた方がいいでしょう。 REPLかjupyterかで、最後に評価した式を表示させているのでしょうが、そこは質問に書いてあるべきです。
退会済みユーザー

退会済みユーザー

2021/05/14 01:55

from google.colab import drive drive.mount('/content/drive') import sys import numpy as np sys.path.append('/content/drive/My Drive') import ActivationFunction as AF from PIL import Image # PILで開いたうえでデータをNumpy形式にする # (例えばJPEGは圧縮されていてNumpyな配列になっていないので、 # そこからNumpyのデータ空間(?)に持ってくる必要がある) tefilename = "test2.png" teimg = Image.open("drive/My Drive/mnist_dataset/" + tefilename) teimg.show() これでは画像表示されませんでした、出力結果は、 Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True). です。
quickquip

2021/05/14 02:20 編集

質問のコードの式が[None, None,,,,]になってしまうのがなぜか? と聞いているんじゃないのですか? 質問だけを見るとそうとしか思えないのでそう回答しましたが、↑(2021/05/14 10:55 のこと) に書いてあることがどう関連するのかわかりません…… やりたいことは追記されましたが、何に困っているのか、何が解決できないことなのか? が分かりません。 ([None, None,,,,]になってしまうのがなぜか? と聞いているんじゃないとしたら、という仮定のもとで)
quickquip

2021/05/14 02:25

もしかして。 この質問のコードが、画像を100*100に縮小してそれを10*10に分割して100個の画像に**したつもり**なんだと思ったらいいんでしょうか? そこからして伝わってないんですが。 (コードに10というリテラルが表れてないので、「そうは見えない」ので混乱しています)
退会済みユーザー

退会済みユーザー

2021/05/14 02:29

記事にはこのコードより短いコードが書かれていて、 実行結果として、画像が等分割されています。 自分は不思議に思っていましたが、記事にそうあるので、できるんだろうなと思っていたができなかったため、ここで質問したのです。
quickquip

2021/05/14 02:34 編集

この質問のコードが、画像を100*100に縮小してそれを10*10に分割して100個の画像に**したつもり**なんだと思ったらいいんでしょうか? に答えてもらえませんか? 追記: あっ、↑は1個目(2021/05/14 11:14 )へのリプライだったでしょうか。だとしたら失礼しました
quickquip

2021/05/14 02:32 編集

記事にはこのコードより短いコードが書かれていて、 ということは記事とは違うコードなんですよね? 何かを書き換えたら思った通りに動かなくなった、という話ですか?
退会済みユーザー

退会済みユーザー

2021/05/14 02:37

補足しました。
quickquip

2021/05/14 23:24 編集

qiitaに書いてあるこのコードの意味が分からないけど、意味が分からないまま適当に変更したらやっぱり思った通りに動かなかった という趣旨でいいですか? (「元のコードの意味が分からないまま適当に変更したコード」だけを見せられたら、コードの意図がなにも伝わらなくてもそりゃ当然、という感想しかない……) qiitaに書いてあるこのコードのここが意味が分からない、と質問された方がマシだったでしょう。qiitaのコードがもともと"よくないコード"なので。
退会済みユーザー

退会済みユーザー

2021/05/14 02:50

まぁそんな感じです、で、教えて貰いたいです。
Munosuke222

2021/05/14 05:02

機械学習だなんだ言う前に真面目にプログラミング勉強してから取り掛かったほうが良いんじゃないの?見てる分には面白いから良いんだけどこのままじゃいつまで経っても作りたいものは作れないと思うよ。
退会済みユーザー

退会済みユーザー

2021/05/14 15:23

回答を受けて質問を大きく編集しました、お願いします。
guest

回答1

0

ベストアンサー

python

1a = [] 2print(a.extend([1, 2])) 3print(a)

plain

1None 2[1, 2]

extendsメソッドは、リストにインプレースに変更して要素を追加するメソッドで、その返り値はNoneです。
リスト内包にout_img.extendを置いたら全部Noneになります。

(やりたいことの説明が質問に一切ないのでここまで)


qiitaの記事から引用

https://qiita.com/ka10ryu1/items/015c6a6a5fa287a47828#%E7%94%BB%E5%83%8F%E3%81%AE%E5%88%86%E5%89%B2vsplithsplit

使用している変数の説明
size 分割したい画素数(今回は64x64の画像にしたいので64)

を読みとばしている。

投稿2021/05/14 00:06

編集2021/05/14 23:29
quickquip

総合スコア11038

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

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

退会済みユーザー

退会済みユーザー

2021/05/14 15:23 編集

回答を受けて質問を大きく編集しました、お願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問