質問編集履歴

2

printでの出力結果を記載。また画像表示時のファイル名バグについて追記

2024/01/02 00:23

投稿

puroknow
puroknow

スコア1

test CHANGED
File without changes
test CHANGED
@@ -46,9 +46,22 @@
46
46
  ##### 上記の詳細・結果
47
47
  printで画像を表示させました。すべて同時に表示されないが、2個ずつ(グレースケールと二値化の画像)は表示される状態です。
48
48
  →訂正です。printは誤記です。imshowで画像を表示させたところ、画像は表示されました。おそらく、画像の読み込みはできています。保存ができません。
49
+ 画像は表示されていましたが、デスクトップ/二値化後の画像のところがバグって変な言葉のファイル名になっていました。
50
+
49
51
  jupyter notebookでコードを実行しています。
50
52
 
51
53
  また回答通りに.jpgを追加しましたが、指定したフォルダに画像は保存されていませんでした。
54
+ printのところを見逃していました。
55
+ printで出した結果は下記です。(処理画像を3つ入れているので6つのファイル名が出ています。
56
+ C:/Users/PC_User/デスクトップ/二値化後の画像/C:\Users\PC_User\デスクトップ\GAZOU\20181025.000234.jpg_0
57
+ C:/Users/PC_User/デスクトップ/二値化後の画像/C:\Users\PC_User\デスクトップ\GAZOU\20181025.000234.jpg_1
58
+ C:/Users/PC_User/デスクトップ/二値化後の画像/C:\Users\PC_User\デスクトップ\GAZOU\R.jpg_0
59
+ C:/Users/PC_User/デスクトップ/二値化後の画像/C:\Users\PC_User\デスクトップ\GAZOU\R.jpg_1
60
+ C:/Users/PC_User/デスクトップ/二値化後の画像/C:\Users\PC_User\デスクトップ\GAZOU\test.jpg_0
61
+ C:/Users/PC_User/デスクトップ/二値化後の画像/C:\Users\PC_User\デスクトップ\GAZOU\test.jpg_1
62
+
63
+ 下記からが修正したコードです。
64
+ また画像を
52
65
 
53
66
  import pathlib
54
67
  import cv2
@@ -57,7 +70,7 @@
57
70
 
58
71
  input_dir = "C:/Users/PC_User/デスクトップ/GAZOU"
59
72
  input_list = list(pathlib.Path(input_dir).glob('**/*.jpg'))
60
- File_Path= "C:/Users/PC_User/デスクトップ/二値化後の画像"
73
+ File_Path= "C:/Users/PC_User/デスクトップ/二値化後の画像/"
61
74
 
62
75
  for i in range(len(input_list)):
63
76
  img_file_name = str(input_list[i])
@@ -73,15 +86,18 @@
73
86
  #黒部分の画素数
74
87
  black_area=whole_area-white_area
75
88
 
76
- #画像の保存
89
+ #画像の保存
90
+ print(File_Path+img_file_name+"_0")
77
- cv2.imwrite(File_Path+os.path.splitext(os.path.basename(img_file_name))[0]+"_0"+".jpg",img_gray)
91
+ cv2.imwrite(File_Path+img_file_name+"_0",img_gray)
92
+ print(File_Path+img_file_name+"_1")
78
- cv2.imwrite(File_Path+os.path.splitext(os.path.basename(img_file_name))[0]+"_1"+".jpg",img_th)
93
+ cv2.imwrite(File_Path+img_file_name+"_1",img_th)
79
94
 
80
95
  #画像の表示
81
96
  cv2.imshow(img_file_name+"_0.jpg",img_gray)
82
97
  cv2.imshow(img_file_name+"_1.jpg",img_th)
83
98
  cv2.waitKey(0)
84
99
  cv2.destroyAllWindows()
100
+
85
101
 
86
102
  ### 補足
87
103
  初心者で元日から始めたばかりで、コードの意味など深くは理解していないです。

1

誤記の修正、回答通りに修正して実行した結果を記載。

2024/01/02 00:05

投稿

puroknow
puroknow

スコア1

test CHANGED
File without changes
test CHANGED
@@ -45,6 +45,43 @@
45
45
 
46
46
  ##### 上記の詳細・結果
47
47
  printで画像を表示させました。すべて同時に表示されないが、2個ずつ(グレースケールと二値化の画像)は表示される状態です。
48
+ →訂正です。printは誤記です。imshowで画像を表示させたところ、画像は表示されました。おそらく、画像の読み込みはできています。保存ができません。
49
+ jupyter notebookでコードを実行しています。
50
+
51
+ また回答通りに.jpgを追加しましたが、指定したフォルダに画像は保存されていませんでした。
52
+
53
+ import pathlib
54
+ import cv2
55
+ import numpy as np
56
+ import os
57
+
58
+ input_dir = "C:/Users/PC_User/デスクトップ/GAZOU"
59
+ input_list = list(pathlib.Path(input_dir).glob('**/*.jpg'))
60
+ File_Path= "C:/Users/PC_User/デスクトップ/二値化後の画像"
61
+
62
+ for i in range(len(input_list)):
63
+ img_file_name = str(input_list[i])
64
+ img_np = np.fromfile(img_file_name, dtype=np.uint8)
65
+ img = cv2.imdecode(img_np, cv2.IMREAD_COLOR)
66
+ img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
67
+ #特定の範囲のGaussian分布から閾値を自動で決めて二値化
68
+ ret,img_th=cv2.threshold(img_gray,0,255,cv2.THRESH_OTSU)
69
+ #全体の画素数
70
+ whole_area=img_th.size
71
+ #白部分の画素数
72
+ white_area=cv2.countNonZero(img_th)
73
+ #黒部分の画素数
74
+ black_area=whole_area-white_area
75
+
76
+ #画像の保存
77
+ cv2.imwrite(File_Path+os.path.splitext(os.path.basename(img_file_name))[0]+"_0"+".jpg",img_gray)
78
+ cv2.imwrite(File_Path+os.path.splitext(os.path.basename(img_file_name))[0]+"_1"+".jpg",img_th)
79
+
80
+ #画像の表示
81
+ cv2.imshow(img_file_name+"_0.jpg",img_gray)
82
+ cv2.imshow(img_file_name+"_1.jpg",img_th)
83
+ cv2.waitKey(0)
84
+ cv2.destroyAllWindows()
48
85
 
49
86
  ### 補足
50
87
  初心者で元日から始めたばかりで、コードの意味など深くは理解していないです。