1. 程式人生 > 程式設計 >使用npy轉image影象並儲存的例項

使用npy轉image影象並儲存的例項

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影象並儲存的例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。