この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| 
                    画像をnumpy配列に変換 [2017/10/22] adash333 [画像をnumpy配列に変換]  | 
                
                    画像をnumpy配列に変換 [2018/10/07] (現在) | 
            ||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| ===== 画像をnumpy配列に変換 ===== | ===== 画像をnumpy配列に変換 ===== | ||
| - | 以下のサイトを写経してみたい。 | + | 以下のサイトのコードほとんどそのままです。 | 
| Python – NumPyで画像を配列として取得する\\ | Python – NumPyで画像を配列として取得する\\ | ||
| 投稿者: edo1z 投稿日: 09/27/2015\\ | 投稿者: edo1z 投稿日: 09/27/2015\\ | ||
| https://endoyuta.com/2015/09/27/python-numpyで画像を配列として取得する/ | https://endoyuta.com/2015/09/27/python-numpyで画像を配列として取得する/ | ||
| + | |||
| + | ==== 1. cat.jpgの用意 ==== | ||
| + | |||
| + | https://pixabay.com/ から、猫の画像をダウンロードして、cat.jpg という名前で保存します。 | ||
| + | |||
| + | {{:pasted:20171022-234329.png}} | ||
| + | |||
| + | {{:pasted:20171022-234304.png}} | ||
| + | |||
| + | 640x426のカラー画像です。 | ||
| + | |||
| + | {{:pasted:20171022-234705.png}} | ||
| + | |||
| + | ==== 2. Jupyter Notebookで以下のコードを入力 ==== | ||
| + | |||
| + | <code> | ||
| + | from PIL import Image | ||
| + | import numpy as np | ||
| + | |||
| + | |||
| + | # PILでcat.jpgを開いてグレースケール画像に変換し、NumPy配列に変換 | ||
| + | im = np.array(Image.open('cat.jpg').convert('L')) | ||
| + | |||
| + | # NumPy配列のshapeと、要素のデータ型を表示 | ||
| + | print(im.shape, im.dtype) | ||
| + | |||
| + | # グレースケール化した画像のNumPy配列に変換したものを表示 | ||
| + | print(im) | ||
| + | |||
| + | # 上記NumPy配列をテキストで保存 | ||
| + | np.savetxt('im_ndarray.txt', im) | ||
| + | </code> | ||
| + | |||
| + | コードを入力してから、Shift + Enterを押すと、以下のような結果になります。 | ||
| + | |||
| + | {{:pasted:20171023-003059.png}} | ||
| + | |||
| + | 上記コードについて説明します。 | ||
| + | |||
| + | まず、PIL(pillow)とNumPyを使うので、インポートします。 | ||
| + | |||
| + | PILでcat.jpgを開いてグレースケール画像に変換し、NumPy配列という行列に変換します。 | ||
| + | |||
| + | 今回は、もとのjpg画像が640x426(幅 640 pixel, 高さ 426 pixel)なので、各ピクセルのグレースケールの値(0から255)を並べた行列は、426行640列となります。そのため、im.shape は、(426, 640)というタプルとなります。 | ||
| + | |||
| + | 上記NumPy配列を、im_ndarray.txtという名前で保存します。 | ||
| + | なんと、50KBのjpg画像をNumPy配列に変換したら、6657KBにもなってしまいました。TIF画像と似たようなものだと思います。 | ||
| + | |||
| + | {{:pasted:20171023-002559.png}} | ||
| + | |||
| + | ちなみに、im_ndarray.txtの中身は、以下のように、数字がスペースと改行で区切られて保存されています。 | ||
| + | |||
| + | {{:pasted:20171023-003709.png}} | ||
| + | |||
| + | ==== 3. 保存したNumPy配列の読み出し(テキストで保存した場合) ==== | ||
| + | 上記で保存したim_ndarray.txtを読み込む場合は、以下のコードとなります。 | ||
| + | |||
| + | <code> | ||
| + | from PIL import Image | ||
| + | import numpy as np | ||
| + | |||
| + | # 上記で保存したNumPy配列を読み出す | ||
| + | b = np.loadtxt('im_ndarray.txt') | ||
| + | print(b) | ||
| + | </code> | ||
| + | |||
| + | {{:pasted:20171023-003321.png}} | ||
| + | |||
| ===== 参考文献 ===== | ===== 参考文献 ===== | ||
| + | ど素人の私がこのコードを見つけるまでに、以下の3つの本の該当部分を繰り返し読みました。 | ||
| + | <html> | ||
| + | |||
| + | <iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=twosquirrel-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=4873117585&linkId=5239e874ec4f1301cf95b0c8cfc497a3"></iframe> | ||
| + | |||
| + |    | ||
| + | |||
| + | <iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=twosquirrel-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=4274221075&linkId=a28404f93dce25380672e34e6da81cbf"></iframe> | ||
| + | |||
| + |    | ||
| + | |||
| + | <iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=twosquirrel-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=487311778X&linkId=ee1b4d5d66ceabe44b7c1445e0846348"></iframe> | ||
| + | |||
| + | </html> | ||
| + | |||
| + | Python – NumPyで画像を配列として取得する\\ | ||
| + | 投稿者: edo1z 投稿日: 09/27/2015\\ | ||
| https://endoyuta.com/2015/09/27/python-numpyで画像を配列として取得する/ | https://endoyuta.com/2015/09/27/python-numpyで画像を配列として取得する/ | ||
| ライン 24: | ライン 109: | ||
| https://lp-tech.net/articles/DCw73 | https://lp-tech.net/articles/DCw73 | ||
| + | |||
| + | 2013年12月9日\\ | ||
| + | [OpenCV] PythonのOpenCVで画像サイズの取得\\ | ||
| + | http://yu-write.blogspot.jp/2013/12/opencv-pythonopencv_9.html | ||