[code]批量視頻/圖片 切圖做樣本

[code]批量視頻/圖片 切圖做樣本

我們的訓練樣本都需要自己來製作,目前的樣本在多段視頻的固定位置可以截取。我採用了多進程同時跑多個視頻然後截圖保存

為了區分是哪一個視頻的截圖,在命名上做了小區分。


import osimport numpy as npimport cv2import timefrom PIL import Image,ImageDrawimport matplotlib.pyplot as plt

切圖的範圍函數

def cut_finish(frame):#切圖的位置 img01 = frame size=img01.shape box = (int(1*size[0]/5), int(1.5*size[0]/5), int(3.5*size[1]/9), int(5.5*size[1]/9)) img02 = img01[box[0]:box[1], box[2]:box[3]] return img02

使用圖片測試截圖的位置

a =cv2.imread(f5.png)b= cut_finish_game(a)fig, ax = plt.subplots()ax.imshow(b)plt.show()


進行切圖

使用文件夾里的圖片

def cut_image(path): path = all_path(path) N = 0 for i in path: frame = cv2.imread(i) cut = cut_finish(frame) path = C:\Users\admin\cut_images\+ ___ + str(N).zfill(0) + .jpg cv2.imwrite(path,img) N += 1 print({}/{}...........
.format(N,len(path)),end=)

使用視頻

def video_cutimage(url,num): vc = cv2.VideoCapture(url) video_is_open = vc.isOpened() n = 0 count = 0 if video_is_open == False: print(沒有播放) while video_is_open: rval,frame = vc.read() cut = cut_witness(frame) count +=1 path = cut_images\+ num + str(n).zfill(0) + .jpg if count == 1: cv2.imwrite(path,cut) n += 1 if count == 20: count = 0


使用多開進程加快切圖速度

注意:

多開的函數必須從另外一個py函數調用。在這同一個jupyter notebook是使用不了的!!

from multiprocessing import Pool#from cut_to_image import video_cutimage p = Pool()n = 0for i in data: n += 1 dd = az__ +str(n)+__az p.apply_async(video_cutimage, args=(i))p.close() p.join()

推薦閱讀:

第三課3 python網路編程
唯一值、值計數以及成員資格
第十二章 Scrapy:Python3下的第一次運行測試
心得丨從0到1,教你如何利用大學四年無師自通,學好機器學習!
python五大主流web框架

TAG:計算機視覺 | Python | 機器學習 |