使用npy轉image影象並儲存的例項
阿新 • • 發佈:2020-07-01
1. 用於分類模型:
import numpy as np import scipy.misc import cv2 import os # DF1 path = "/home/pi/工作/predict1/" npy_list = os.listdir(path) save_path = "/home/pi/predict1_img/" if not os.path.exists(save_path): os.mkdir(save_path) for i in range(0,len(npy_list)): print(i) print(npy_list[i]) npy_full_path = os.path.join(path,npy_list[i]) img = np.load(npy_full_path) # load進來 save_full_path = os.path.join(save_path,npy_list[i][:-4]) scipy.misc.imsave(save_full_path,img) # 儲存
2. 用於分割模型
""" 將資料集隨機分成訓練集、測試集 傳入引數: ratio = 0.7 # 訓練樣本比例 path = "/home/pi/20190701_0705" # 資料路徑 new_path = "/home/pi/20190701_0705_new2" # 儲存路徑 使用方法: temp = Generate_Train_and_Test(path,new_path,ratio) temp.splict_data() """ import random import os import cv2 def makeDir(path): try: if not os.path.exists(path): if not os.path.isfile(path): # os.mkdir(path) os.makedirs(path) return 0 else: return 1 except Exception as e: print(str(e)) return -2 class Generate_Train_and_Test: def __init__(self,path,ratio): if not os.path.exists(new_path): makeDir(new_path) self.path = path self.new_path = new_path self.ratio = ratio self.train_sample_path = os.path.join(new_path,"train") self.test_sample_path = os.path.join(new_path,"test") makeDir(self.train_sample_path) makeDir(self.test_sample_path) def splict_data(self): class_names = os.listdir(self.path) # 類別:bg and ng10 for name in class_names: print("process class name=%s" % name) tmp_class_name = os.path.join(self.path,name) save_train_class_name = os.path.join(self.train_sample_path,name) save_test_class_name = os.path.join(self.test_sample_path,name) makeDir(save_train_class_name) makeDir(save_test_class_name) if os.path.isdir(tmp_class_name): image_names = os.listdir(tmp_class_name) # 其中一個類別的所有影象 image_names = [f for f in image_names if not f.endswith('_mask.png')] total = len(image_names) # 1,打亂當前類中所有影象 random.shuffle(image_names) # 2,從當前類(ng)中,取前面的影象作為train data train_temp = int(self.ratio * total) # 打亂後,取前面作為train_data for i in range(0,train_temp): print(i,image_names[i]) temp_img_name = os.path.join(tmp_class_name,image_names[i]) train_image = cv2.imread(temp_img_name) temp_label_name = os.path.join(tmp_class_name,image_names[i][:-4] + '_mask.png') train_label = cv2.imread(temp_label_name) save_train_img_name = os.path.join(save_train_class_name,image_names[i]) cv2.imwrite(save_train_img_name,train_image) save_train_label_name = os.path.join(save_train_class_name,image_names[i][:-4] + '_mask.png') cv2.imwrite(save_train_label_name,train_label) # 3,從當前類(bg)中,取後面的影象作為test data for i in range(train_temp,total): print(i,image_names[i]) test_img_name = os.path.join(tmp_class_name,image_names[i]) test_image = cv2.imread(test_img_name) test_label_name = os.path.join(tmp_class_name,image_names[i][:-4] + '_mask.png') test_label = cv2.imread(test_label_name) save_test_img_name = os.path.join(save_test_class_name,image_names[i]) cv2.imwrite(save_test_img_name,test_image) save_test_label_name = os.path.join(save_test_class_name,image_names[i][:-4] + '_mask.png') cv2.imwrite(save_test_label_name,test_label) ratio = 0.7 # 訓練樣本比例 path = "/home/pi/工作/20190712_splict" # 資料路徑 new_path = "/home/pi/工作/20190712_splict_new3" # 儲存路徑 temp = Generate_Train_and_Test(path,ratio) temp.splict_data()
補充知識:python把由圖片組成的資料夾轉換為.npy檔案
由於深度神經網路的需要,我要將一個裡面全是.png格式的圖片的資料夾轉換為一個.npy檔案,即將一個圖片資料夾轉換成一個.npy檔案。
具體思路為:
若已知資料夾中圖片數量,可生成一個三維陣列,第一維表示圖片數量,後兩維表示一張圖片的尺寸;
利用np.save()函式將生成的三維陣列儲存成一個.npy檔案
import numpy as np import imageio import os os.chdir('E:/RegistrationCode/papercode/datasets/mri_2d_test') #切換python工作路徑到你要操作的圖片資料夾,mri_2d_test為我的圖片資料夾 a=np.ones((190,192,160)) #利用np.ones()函式生成一個三維陣列,當然也可用np.zeros,此陣列的每個元素a[i]儲存一張圖片 i=0 for filename in os.listdir(r"E:/RegistrationCode/papercode/datasets/mri_2d_test"): #使用os.listdir()獲取該資料夾下每一張圖片的名字 im=imageio.imread(filename) a[i]=im i=i+1 if(i==190): #190為資料夾中的圖片數量 break np.save('你要儲存的.npy檔案所在路徑及名字',a)
以上這篇使用npy轉image影象並儲存的例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。