質問編集履歴
5
タイトルを修正しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
多次元配列の繰り返し
|
test
CHANGED
File without changes
|
4
修正2
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
以下のような手順で添付画像のような画像を出力したいと思っています。
|
3
3
|
- 読み込み リストフォルダ内の画像をOpenCVで読み込む
|
4
4
|
- 画像処理 Matplotで配置。縦2×横3の計6つの図を配置して保存。
|
5
|
-
- 繰り返し
|
5
|
+
- 繰り返し 7-12枚目の図で画像処理を繰り返す。
|
6
6
|
|
7
7
|
### 発生している問題
|
8
8
|
繰り返し構造に躓いています。画像(多次元配列)のリストから順次6つの画像を処理したいのですが、多次元配列の範囲選択の書き方がわかりません。アドバイスを頂けますと幸いです。
|
3
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
以下のような手順で添付画像のような画像を出力したいと思っています。
|
3
3
|
- 読み込み リストフォルダ内の画像をOpenCVで読み込む
|
4
4
|
- 画像処理 Matplotで配置。縦2×横3の計6つの図を配置して保存。
|
5
|
-
- 繰り返し
|
5
|
+
- 繰り返し 画像処理が終わったら7-12枚目の図で2を繰り返す。
|
6
6
|
|
7
7
|
### 発生している問題
|
8
8
|
繰り返し構造に躓いています。画像(多次元配列)のリストから順次6つの画像を処理したいのですが、多次元配列の範囲選択の書き方がわかりません。アドバイスを頂けますと幸いです。
|
2
少しだけ要約しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
### 前提
|
2
|
-
フォルダ内の画像をOpenCVで読み込んだ後、Matplotで配置した画像を出力しようとしています。Figure上に2×3のAxisを設け、フォルダ内の画像が6枚以上の時は新しいFigureを作成できるような繰り返し構造を作る想定です。
|
3
|
-
|
4
|
-
### 実現したいこと
|
5
|
-
以下の
|
2
|
+
以下のような手順で添付画像のような画像を出力したいと思っています。
|
6
|
-
|
3
|
+
- 読み込み リストフォルダ内の画像をOpenCVで読み込む
|
7
|
-
> 2 Figとaxの定義
|
8
|
-
|
4
|
+
- 画像処理 Matplotで配置。縦2×横3の計6つの図を配置して保存。
|
5
|
+
- 繰り返し 番号リスト2が終わったら7-12枚目の図で2を繰り返す。
|
9
6
|
|
10
7
|
### 発生している問題
|
11
|
-
|
8
|
+
繰り返し構造に躓いています。画像(多次元配列)のリストから順次6つの画像を処理したいのですが、多次元配列の範囲選択の書き方がわかりません。アドバイスを頂けますと幸いです。
|
9
|
+
|
10
|
+
### ソースコードの実行結果
|
11
|
+
エラーは特に表示されず、添付画像は出力できるので処理の1巡目は想定通り動いているように見えますが、それ以降の処理で7-10枚目の画像に移れない状態です。
|
12
12
|
|
13
13
|
### 該当のソースコード
|
14
14
|
```python
|
@@ -32,37 +32,34 @@
|
|
32
32
|
img = cv2.resize(img, (300, 300), cv2.INTER_LANCZOS4)
|
33
33
|
imgs.append(img)
|
34
34
|
|
35
|
-
#
|
35
|
+
#初期値定義
|
36
36
|
shownumber = 18
|
37
37
|
#縦に配置する画像の枚数
|
38
38
|
showaxis_row = 3
|
39
39
|
#縦に配置する画像の枚数
|
40
40
|
showaxis_col = 2
|
41
41
|
|
42
|
-
#[1]画像を格納したリストを範囲として定義(「詳細は試したこと」に記載)
|
43
42
|
|
43
|
+
#以下は画像処理
|
44
|
+
|
45
|
+
###画像を格納したリストを範囲として定義(「詳細は試したこと」に記載)
|
46
|
+
|
44
|
-
#
|
47
|
+
###Figとaxの定義,Figureに対して縦3*横2のaxesを配置
|
45
48
|
fig, ax = plt.subplots(showaxis_row,showaxis_col, figsize=(8.27, 11.69))
|
46
|
-
|
47
|
-
#[3]axに画像を配置
|
48
49
|
for i in range(showaxis_row):
|
49
50
|
for j in range(showaxis_col):
|
50
51
|
ax[i, j].xaxis.set_major_locator(plt.NullLocator())
|
51
52
|
ax[i, j].yaxis.set_major_locator(plt.NullLocator())
|
52
53
|
ax[i, j].imshow(imgs[showaxis_row*i+j], cmap="bone")
|
53
54
|
if 2==i*j:
|
54
|
-
# plt.show()
|
55
|
+
# plt.show()
|
55
|
-
plt.savefig("/Users/Desktop/output/"+str(a)+ ".jpg",dpi=200)
|
56
|
+
plt.savefig("/Users/Desktop/output/"+str(a)+ ".jpg",dpi=200)
|
56
57
|
|
57
58
|
```
|
58
59
|
|
59
60
|
### 試したこと
|
60
|
-
|
61
|
+
下記のように範囲指定を試みましたが、7番目以降の画像を指定しようとしても同じ範囲をループしてしまいうまくいきませんでした。
|
61
|
-
> ・出力されたFigureには横2列、縦3行のAxesが配置される
|
62
|
-
> ・plt.showで一周目の実行結果を見ると6つのAxesには6種類の画像が表示される。
|
63
|
-
> ・最終的に出力されるFigureは3枚の想定ですが一枚しか出力できない。
|
64
62
|
|
65
|
-
そこで下記のように範囲指定を試みましたが、7番目以降の画像を指定しようとしても同じ範囲をループしてしまいうまくいきませんでした。
|
66
63
|
# 1以下の行を挿入すると ax[0,0]だけに画像の配置されたFigureが19枚生成される。(33行目)
|
67
64
|
```ここに言語を入力
|
68
65
|
count_num = 0
|
@@ -86,7 +83,6 @@
|
|
86
83
|
MacOS Monetery 12.5.1
|
87
84
|
Python3
|
88
85
|
|
89
|
-
###
|
86
|
+
### 添付画像
|
90
|
-
参考までに最初のループで出力される画像です。
|
91
87
|
フォルダの画像が18枚ならこれを3つ、30枚なら6つ生成できる状態が理想です。
|
92
88
|
![](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-21/b792eb8c-078d-4b49-bd89-b3639c02c8da.png)
|
1
少し体裁を修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -3,9 +3,9 @@
|
|
3
3
|
|
4
4
|
### 実現したいこと
|
5
5
|
以下の処理をネスト状に繰返し、全ての画像をAxesに反映できるようにしたいです。
|
6
|
-
>
|
6
|
+
> 1 画像を格納したリストを範囲として定義。
|
7
|
-
>
|
7
|
+
> 2 Figとaxの定義
|
8
|
-
>
|
8
|
+
> 3 axに画像を配置(6枚分を埋めたら1の処理に戻る)
|
9
9
|
|
10
10
|
### 発生している問題
|
11
11
|
画像を格納したリストを参照して全ての画像をFigure上に配置するにあたり、画像(RGBA 値を持つ配列形式)の範囲選択に躓いています。この配列から6つの画像を順番に配置したいのですが、どうやら範囲選択に問題があり、2周目以降のFigureがうまく生成されません。詳細とコードは以下に記載いたします。アドバイスを頂けますと幸いです。
|
@@ -58,22 +58,28 @@
|
|
58
58
|
|
59
59
|
### 試したこと
|
60
60
|
ソースコードの実行結果を見る限り1回目の処理(リスト内にある0〜6番目の画像)は成功しているようにみえます。(添付画像を参照)
|
61
|
-
・出力されたFigureには横2列、縦3行のAxesが配置される
|
61
|
+
> ・出力されたFigureには横2列、縦3行のAxesが配置される
|
62
|
-
・plt.showで一周目の実行結果を見ると6つのAxesには6種類の画像が表示される。
|
62
|
+
> ・plt.showで一周目の実行結果を見ると6つのAxesには6種類の画像が表示される。
|
63
|
-
・最終的に出力されるFigureは3枚の想定ですが一枚しか出力できない。
|
63
|
+
> ・最終的に出力されるFigureは3枚の想定ですが一枚しか出力できない。
|
64
64
|
|
65
65
|
そこで下記のように範囲指定を試みましたが、7番目以降の画像を指定しようとしても同じ範囲をループしてしまいうまくいきませんでした。
|
66
66
|
# 1以下の行を挿入すると ax[0,0]だけに画像の配置されたFigureが19枚生成される。(33行目)
|
67
|
+
```ここに言語を入力
|
67
|
-
|
68
|
+
count_num = 0
|
68
69
|
a = 0
|
69
70
|
for a ,list_imgs in enumerate(imgs[count_num:shownumber]):
|
71
|
+
```
|
70
72
|
|
71
73
|
続けて以下のように範囲を指定しようとすると、[0,0]の位置にだけ画像が出力されたFigureが19枚出力される。
|
74
|
+
```ここに言語を入力
|
72
75
|
ax[i, j].imshow(list.imgs, cmap="bone")
|
76
|
+
```
|
73
77
|
|
74
78
|
#2以下の範囲指定だと6枚のFigureがjpgとして保存されるが全て最初の処理と同じ状態になる。 (33行目)
|
79
|
+
```ここに言語を入力
|
75
|
-
|
80
|
+
a = 0
|
76
81
|
for a in range(int(showaxis_row * showaxis_col / shownumber)):
|
82
|
+
```
|
77
83
|
|
78
84
|
### 実行環境について補足
|
79
85
|
|