質問編集履歴

5

タイトルを修正しました。

2023/01/26 05:16

投稿

mtf
mtf

スコア0

test CHANGED
@@ -1 +1 @@
1
- OpenCVで読み込んだ画像をMatplotlibで複数Figureとて出力する方法
1
+ 多次元配列繰り返
test CHANGED
File without changes

4

修正2

2023/01/25 19:03

投稿

mtf
mtf

スコア0

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
  以下のような手順で添付画像のような画像を出力したいと思っています。
3
3
  - 読み込み リストフォルダ内の画像をOpenCVで読み込む
4
4
  - 画像処理 Matplotで配置。縦2×横3の計6つの図を配置して保存。
5
- - 繰り返し 画像処理が終わったら7-12枚目の図で2を繰り返す。
5
+ - 繰り返し 7-12枚目の図で画像処理を繰り返す。
6
6
 
7
7
  ### 発生している問題
8
8
  繰り返し構造に躓いています。画像(多次元配列)のリストから順次6つの画像を処理したいのですが、多次元配列の範囲選択の書き方がわかりません。アドバイスを頂けますと幸いです。

3

修正

2023/01/25 19:02

投稿

mtf
mtf

スコア0

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
  以下のような手順で添付画像のような画像を出力したいと思っています。
3
3
  - 読み込み リストフォルダ内の画像をOpenCVで読み込む
4
4
  - 画像処理 Matplotで配置。縦2×横3の計6つの図を配置して保存。
5
- - 繰り返し 番号リスト2が終わったら7-12枚目の図で2を繰り返す。
5
+ - 繰り返し 画像処理が終わったら7-12枚目の図で2を繰り返す。
6
6
 
7
7
  ### 発生している問題
8
8
  繰り返し構造に躓いています。画像(多次元配列)のリストから順次6つの画像を処理したいのですが、多次元配列の範囲選択の書き方がわかりません。アドバイスを頂けますと幸いです。

2

少しだけ要約しました。

2023/01/25 19:01

投稿

mtf
mtf

スコア0

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
- 以下の処理をネスト状に繰返し、全ての画像をAxesに反映できるようにしたいす。
2
+ 以下のような手順で添付画像ような画像を出力したいと思っています。
6
- > 1 画像を格納したリストを範囲として定義。
3
+ - 読み込み リストフォルダ内の画像OpenCVで読み込む
7
- > 2 Figとaxの定義
8
- > 3 axに画像を配置6枚分埋めたら1の処理に戻る)
4
+ - 画像処理 Matplotで配置。縦2×横3の計6つの図配置して保存。
5
+ - 繰り返し 番号リスト2が終わったら7-12枚目の図で2を繰り返す。
9
6
 
10
7
  ### 発生している問題
11
- 画像を格納たリストを参照して全ての画像をFigure上配置するにあたり、画像(RGBA 値を持つ配列形式)の範囲選択に躓いています。この配列から6つの画像を順番に配置したいのですが、どうやら範囲選択に問題、2周目以降のFigureがうく生成されません。詳細とコードは以下に記載いたします。アドバイスを頂けますと幸いです。
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
- #表示する画像の枚数合計、リストで読み込んだPNGファイルを全て出力できるようにしたい。
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
- #[2]Figとaxの定義,Figureに対して縦3*横2のaxesを配置
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()# 1回目の処理で作成されるFigureでは6つのAxesに6種類の画像が表示される。
55
+ # plt.show()
55
- plt.savefig("/Users/Desktop/output/"+str(a)+ ".jpg",dpi=200)#名前をつけてOutputフォルダに保存
56
+ plt.savefig("/Users/Desktop/output/"+str(a)+ ".jpg",dpi=200)
56
57
 
57
58
  ```
58
59
 
59
60
  ### 試したこと
60
- ソースコード実行結果見る限り1回目の処理(リスト内にある0〜6番目の画像)は成功しているよにみえ(添付画像を参照)
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

少し体裁を修正しました。

2023/01/21 03:16

投稿

mtf
mtf

スコア0

test CHANGED
File without changes
test CHANGED
@@ -3,9 +3,9 @@
3
3
 
4
4
  ### 実現したいこと
5
5
  以下の処理をネスト状に繰返し、全ての画像をAxesに反映できるようにしたいです。
6
- > 1 画像を格納したリストを範囲として定義。
6
+ > 1 画像を格納したリストを範囲として定義。
7
- > 2 Figとaxの定義
7
+ > 2 Figとaxの定義
8
- > 3 axに画像を配置(6枚分を埋めたら1の処理に戻る)
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
- count_num = 0
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
- a = 0
80
+ a = 0
76
81
  for a in range(int(showaxis_row * showaxis_col / shownumber)):
82
+ ```
77
83
 
78
84
  ### 実行環境について補足
79
85