常規(guī)應(yīng)用
對(duì)于程序員來(lái)說(shuō)丧慈,在實(shí)際的生活中析命,對(duì)于一些簡(jiǎn)單的程序,往往都是使用自己編寫的代碼逃默。畢竟學(xué)以致用才能熟練掌握鹃愤,而OpenCV在生活中最常用的一些功能包括:將視頻轉(zhuǎn)換為GIF、錄制屏幕完域,圖片格式轉(zhuǎn)換等等等等软吐。
這些小程序說(shuō)實(shí)話從網(wǎng)上下載往往會(huì)有很多的病毒,而使用PS或者PR的門檻對(duì)于有些人來(lái)說(shuō)又有點(diǎn)高吟税,那怎么辦呢凹耙?自己動(dòng)手豐衣足食。
視頻轉(zhuǎn)換為GIF
在前面的博文中肠仪,我們已經(jīng)介紹了視頻的相關(guān)操作肖抱。
對(duì)于視頻來(lái)說(shuō),其是由一幀一幀的圖像構(gòu)成的异旧,同樣的GIF圖片也是意述。所以,我們可以將需要轉(zhuǎn)換的視頻吮蛹,保存為單個(gè)圖像的集合荤崇,然后轉(zhuǎn)換為GIF圖片。代碼如下所示:
import cv2
import imageio
cap = cv2.VideoCapture("45.mp4")
all_frames = []
while (cap.isOpened()):
ret, frame = cap.read()
if ret is False:
break
all_frames.append(frame)
cv2.imshow('video', frame)
c = cv2.waitKey(1)
if c == 27:
break
cap.release()
cv2.destroyAllWindows()
gif = imageio.mimsave('result.gif', all_frames, 'GIF')
運(yùn)行之后潮针,效果如下:
當(dāng)然术荤,這種是使用OpenCV與imageio。其實(shí)每篷,我們還有更簡(jiǎn)單的直接將視頻轉(zhuǎn)換為GIF瓣戚,不過(guò)因?yàn)槭侵v解OpenCV所以稍微復(fù)雜了點(diǎn)。下面是最簡(jiǎn)單的GIF轉(zhuǎn)換代碼:
from moviepy.editor import *
clip = (VideoFileClip("45.mp4"))
clip.write_gif("result.gif")
三行代碼即可雳攘,使用之前带兜,通過(guò)如下命令安裝moviepy庫(kù):
pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple
錄制屏幕
在實(shí)際的電腦辦公中,除了需要將視頻轉(zhuǎn)換為GIF動(dòng)圖以外吨灭,我們可能還有很多時(shí)候會(huì)用到錄制屏幕的操作。具體實(shí)現(xiàn)步驟如下:
from PIL import ImageGrab
import numpy as np
import cv2
fps = 30
curScreen = ImageGrab.grab() # 獲取屏幕對(duì)象
height, width = curScreen.size
video = cv2.VideoWriter('45.avi', cv2.VideoWriter_fourcc(*'XVID'), fps, (height, width))
while True:
frame = ImageGrab.grab() # 抓取屏幕
frame = cv2.cvtColor(np.array(frame), cv2.COLOR_RGB2BGR)
# 顯示無(wú)圖像的窗口
cv2.imshow('recording', np.zeros((1, 255), np.uint8))
# 控制窗口顯示位置刑巧,右下角
cv2.moveWindow('recording', height - 100, width - 100)
video.write(frame)
# 退出條件
c = cv2.waitKey(1)
if c == 27:
break
video.release()
cv2.destroyAllWindows()
這里喧兄,我們通過(guò)ImageGrab獲取屏幕的寬高无畔,然后錄制視頻,同時(shí)通過(guò)ESC鍵退出錄制吠冤。