1. 程式人生 > >tensorflow學習筆記1:影象資料的一些簡單操作

tensorflow學習筆記1:影象資料的一些簡單操作

        博主學習TensorFlow不久,學習路上也是遇到不少問題。所以決定寫一個系列的學習筆記,算是記錄下學習歷程,方便以後翻閱。當然如果可以幫助到一些新手的話就更好了,高手請繞道。

1.影象資料的採集:

         博主是在從事計算機視覺方面的研究,要知道我們平時往往需要大量的影象資料。網上有很多的資料集而且也都做了比較比較好的標記。但是有的時候還是需要自己來採集一些影象來完成一些特定的任務。比如博主就因為要做道路分割的問題自己採集了一些道路影象。好了下面開始所怎麼採集影象。一般我們採集影象是通過拍攝視訊的形式來採集影象然後將視訊裁剪成影象,當然一般使用手機拍攝就可以了注意拍攝的角度等問題儘量減少晃動。下面貼將視訊處理成影象的程式碼,這樣就將影象裁剪成了影象並規範命名好了:

import cv2

vc = cv2.VideoCapture('video.mp4')  # 讀入視訊檔案
c = 1

if vc.isOpened():  # 判斷是否正常開啟
    rval, frame = vc.read()
else:
    rval = False

timeF = 1000  # 視訊幀計數間隔頻率,根據需要影象的差異性大小調整

while rval:  # 迴圈讀取視訊幀
    rval, frame = vc.read()
    if (c % timeF == 0):  # 每隔timeF幀進行儲存操作
        cv2.imwrite('image/' + str(c) + '.jpg', frame)  # 儲存為影象
    c = c + 1
    cv2.waitKey(1)
vc.release()

2.影象資料的對稱處理

        我們知道有時候採集的影象資料不夠怎麼辦可以採用多種方法將原有資料集中的影象做一些處理來擴充資料集,博主之前就通過將影象做對稱處理的方式擴充了資料集:

#-*coding:-UTF-8-*-
import cv2
import numpy as np
import os
import os.path
def files(filedir):
    filenames = []
    for i in os.listdir(filedir):
        filenames.append(i)
    return filenames
def file_head(str1):
    head = str1.strip('.jpg')#如果字尾名不是jpg,改成對應的字尾名就可以了
    return head

file_path="./image_SWJTU/"#讀取影象的位置
save_path="./image_SWJTU2/"#儲存影象的位置
for filename in files(file_path):
    index = file_head(filename)
    string_file = file_path+filename
    image = cv2.imread(string_file)
    width, height, channels = image.shape
    image1 = np.zeros(image.shape, np.uint8)
    for i in range(height):
        for j in range(width):
            image1[j, height - i - 1] = image[j, i]
    cv2.imwrite(save_path+str(int(index))+".jpg",image1)#str(int(index))
#注意我是存在了兩個地方如果將影象也儲存在讀取影象的地方str(int(index))這個地方要改,不然會覆蓋
#原影象

3.影象資料與其標籤的讀取

          好吧這個沒啥好介紹的直接貼程式碼好了,如果目錄結果不同可以做相應的調整:

# -*- coding: UTF-8 -*-

from skimage import io,transform
import os
import glob
import numpy as np
w =256
h =128
c = 1
path='./image/'#在image裡面有很多的資料夾,每個資料夾中又儲存著一類的圖片
def read_img(path):
    cate=[path+x for x in os.listdir(path) if os.path.isdir(path+x)]
    imgs=[]
    labels=[]
    for idx,folder in enumerate(cate):#遍歷所有的資料夾
        att=Att[idx]
        for im in glob.glob(folder+'/*.jpg'):#遍歷每個資料夾中的影象檔案
            #print('reading the images:%s'%(im))
            img=io.imread(im)
            img=transform.resize(img,(w,h,c))
            imgs.append(img)
            labels.append(idx)
    return np.asarray(imgs,np.float32),np.asarray(labels,np.int32),np.asarray(attribute,np.float32),np.asarray(att_scoore,np.float32),count
data,label=read_img(path)