質問するログイン新規登録

回答編集履歴

1

回答の改善

2017/10/27 16:37

投稿

K_S_
K_S_

スコア419

answer CHANGED
@@ -1,42 +1,26 @@
1
1
  試しに下記コードを作成してみました。
2
2
  PIL, bumpy, matplotlib.pyplotライブラリを利用すれば、実現できそうです。
3
+ (追記)他の方の回答を参考にコードを修正しました。
3
4
 
4
5
  **コード**
5
6
  ```python
6
- from PIL import Image
7
+ from PIL import Image, ImageOps, ImageFilter
7
8
  import numpy as np
8
9
  import matplotlib.pyplot as plt
9
10
 
10
- # 画像取得
11
+ # 画像読み込み
11
12
  img = Image.open('sample.png')
12
- width, height = img.size
13
- img_pixels = np.array([[img.getpixel((x,y)) for x in range(width)] for y in range(height)])
14
-
15
- # 描画範囲の指定
13
+ # グレースケール化
14
+ img = ImageOps.grayscale(img)
15
+ # ぼかし
16
- x = np.linspace(0, width, width+1)
16
+ img = img.filter(ImageFilter.GaussianBlur(50.0))
17
- y = np.linspace(0, height, height+1)
18
-
19
- # メッシュの作成
17
+ # 配列化
20
- X, Y = np.meshgrid(x, y)
18
+ data = np.asarray(img)
21
-
22
- # 高さ方向の配列初期化
23
- Z = np.array([[0 for i in range(width+1)] for j in range(height+1)])
24
-
25
- #
26
- # グレースケールを計算して値を格納する
27
- #
28
- for _y in range(height):
29
- for _x in range(width):
30
- r,g,b = img_pixels[_y][_x]
31
- # グレースケール(輝度)を計算する
32
- Z[_y][_x] = 0.299 * r + 0.587 * g + 0.114 * b
33
-
34
- # 等高線作成
19
+ # 等高線
35
- plt.contour(X, Y, Z)
20
+ plt.contour(data)
36
-
37
- # 描画実行
21
+ # 描画
38
22
  plt.show()
39
23
  ```
40
24
 
41
25
  **結果**
42
- ![結果画像](7ddda5ccdf282a01a4ec7f09aa9a7c06.png)
26
+ ![イメージ説明](6923b72422c44431f0cfbb6ba9f637df.png)