#概要
皆様、お久しぶりです。以下について困っているので意見をいただけると嬉しいです。
私は現在、「巨大な一枚の画像を細切りにして保存する」コードを作成しています。
一枚の画像を何枚にも区切って保存したいのですが、出力される画像が一枚だけになるなど
期待している出力が得られなくて困っております。
#処理の流れ
保存したいディレクトリの作成や読み込むディレクトリの指定部分については割愛し、取り込んだ画像をどのように処理したいかを以下に示します。
1.巨大な画像を読み込む
2.読み込んだ画像のサイズを33で割り切れる形にトリミング (resize_image)
3.resize_imageを33×33の画像サイズでcropし、保存(cropped_img)
4.cropped_imgを中心を基準に21×21にcropし、保存(label_img)
#困っているポイント
基本的にエラーは出ていないのですが、出力される画像が一枚だけとなり困っております。
初歩的なミスだとは思うのですが、急ぎ解決する必要があるため質問を投稿しました。
参考させていただいたサイト様
Neural Network Console を用いた超解像処理の実装
#コードの該当箇所
おそらく原因であろう箇所を抜粋しています。
最後に全文を載せておきます。
python
1starting_point = [6,8] 2end_point = [3834, 2153] 3num = 0 4n = 0 5 6 7for i in range(range1): 8 ii = i +1 9 input_dir_sub = os.path.join(input_dir,str(ii)) 10 11 os.chdir(input_dir_sub) 12 imgs = os.listdir(input_dir_sub) 13 14 15 for a in imgs: 16 img = cv2.imread(a) 17 resize_img = drop_size(img, starting_point,end_point ) 18 19 test_dir = os.path.join(dataset_dir,"test",str(ii) ,str(a)) 20 label_dir = os.path.join(dataset_dir,"label",str(ii) ,str(a)) 21 22 if not os.path.exists(test_dir): 23 os.makedirs(test_dir) 24 if not os.path.exists(label_dir): 25 os.makedirs(label_dir) 26 27 if resize_img is None: 28 sys.stdout.write("Failed to load image file.\n") 29 sys.exit(1) 30 if len(resize_img.shape) == 3: 31 height, width, channels = resize_img.shape[:3] 32 else: 33 height, width = resize_img.shape[:2] 34 channels = 1 35 36 numX = width // 33 37 numY = height // 33 38 39 for i in range(numX): 40 for j in range(numY): 41 cropped_img = resize_img[33*j:33*(j+1),33*i:33*(i+1)] 42 label_img = cropped_img[6:27,6:27] 43 44 45 46 cv2.imwrite(test_dir+"\crop_" + ('%04d'%num) + ".png",cropped_img) 47 cv2.imwrite(label_dir+"\label_" + ('%04d'%num) + ".png",label_img) 48 49 num = num + 1 50 n = n + 1 51 52
#補足
上に挙げた参考サイトを見てわかるように、CNNのためのデータセット作成用プログラムとなります。
比較的サイズの大きい画像を超解像度化させるため、処理の都合上、画像を細切れにしたいのです。
#コード(全文)
最後に、コードの全文を載せておきます。
エラーが発生しては場当たり的に解決するように記述しているため
見苦しいですが、よろしくお願いします。
python
1import numpy 2import cv2 3import sys 4import os 5from pathlib import Path 6 7 8def drop_size(input_image , start_point ,end_point): 9 image =(input_image.shape[0], input_image.shape[1]) 10 small_image = input_image[start_point[1]:end_point[1],start_point[0]:end_point[0]] 11 12 return small_image 13 14 15 16input_dir = input("input_iamge_directory: ") 17range1 = len(os.listdir(input_dir)) 18print("ファイルの数 : %d" %range1) 19dataset_dir = input("dataset directory : ") 20 21 22os.chdir(dataset_dir) 23if not os.path.exists("test"): 24 os.mkdir("test") 25if not os.path.exists("label"): 26 os.mkdir("label") 27 28------------------------------------------------------------------------------------------------------ 29#基点の指定 30starting_point = [6,8] 31end_point = [3834, 2153] 32num = 0 33n = 0 34 35 36for i in range(range1): 37 ii = i +1 38 input_dir_sub = os.path.join(input_dir,str(ii)) 39 40 os.chdir(input_dir_sub) 41 imgs = os.listdir(input_dir_sub) 42 43 44 for a in imgs: 45 img = cv2.imread(a) 46 resize_img = drop_size(img, starting_point,end_point ) 47 48 test_dir = os.path.join(dataset_dir,"test",str(ii) ,str(a)) 49 label_dir = os.path.join(dataset_dir,"label",str(ii) ,str(a)) 50 51 if not os.path.exists(test_dir): 52 os.makedirs(test_dir) 53 if not os.path.exists(label_dir): 54 os.makedirs(label_dir) 55 56 if resize_img is None: 57 sys.stdout.write("Failed to load image file.\n") 58 sys.exit(1) 59 if len(resize_img.shape) == 3: 60 height, width, channels = resize_img.shape[:3] 61 else: 62 height, width = resize_img.shape[:2] 63 channels = 1 64 65 numX = width // 33 66 numY = height // 33 67 68 for i in range(numX): 69 for j in range(numY): 70 cropped_img = resize_img[33*j:33*(j+1),33*i:33*(i+1)] 71 label_img = cropped_img[6:27,6:27] 72 73 74 75 cv2.imwrite(test_dir+"\crop_" + ('%04d'%num) + ".png",cropped_img) 76 cv2.imwrite(label_dir+"\label_" + ('%04d'%num) + ".png",label_img) 77 78 num = num + 1 79 n = n + 1 80---------------------------------------------------------------------------------------------------------- 81 82print("Finish!!") 83
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/21 08:58
2018/11/21 09:25