回答編集履歴

1

回答の改善

2017/10/27 16:37

投稿

K_S_
K_S_

スコア419

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