【小林的OpenCV基礎課 3】視頻淺淺談
小林加班回來啦 今週ああ疲れて╮(╯_╰)╭
在上一話中我們講解了Hello World示例代碼和攝像頭的開啟,最後留了一道作業題,就是保存攝像頭的截圖和錄像。
在保存截圖的時候用到了一個函數imwrite,函數原型
retval = cv2.imwrite(filename,img[, params])n
- filename:要保存的文件名,注意要加上格式後綴,字元串形式;
- img:圖像矩陣。
敲黑板了,只有8位(或16位無符號的png、jpg和tiff)的單通道或三通道的圖像可以使用這個函數,否則要用convertTo或cvtColor函數進行轉換。關於啥是通道,這就涉及到了色彩空間的知識(預告啦,下一話我們會通過例子簡單解釋下啥是色彩空間)。
好了,我們貼出保存攝像頭截圖的代碼:
import numpy as npnimport cv2nn# 初始化攝像頭ncap = cv2.VideoCapture(0)nindex = 0nimgname = 0n# 用循環不斷獲取當前幀 處理後顯示出來nwhile True:n index = index + 1n# 捕獲當前幀n ret,img = cap.read()n# 顯示圖像n cv2.imshow(Camera,img)n# 每5秒保存一張截圖n if index == 100:n imgname = imgname + 1n if imgname >= 50:n imgname = 0n# 文件名字元串拼接n fname = str(imgname) + .jpgn# 寫入截圖n cv2.imwrite(fname, img)n print(fname + saved)n index = 0n# 結束幀捕獲的條件n# 等待50ms 即幀頻為20fpsn if cv2.waitKey(50) & 0xFF == ord(q):n breakn# 釋放資源ncap.release()ncv2.destroyAllWindows()n
來自康娜醬的提示:關於攝像頭的幀頻,通常以12~50fps為宜,電影的專業幀頻是24fps,電視行業的專業幀頻是30fps,嗯,所以大家懂了嗎?而且如果要對截圖做圖像處理的話還要考慮處理負荷,因此幀頻不宜過高。
所以大家有沒有看懂呢?如果沒看懂可以評論區留言或者後台私信小林哦。
怎麼錄像!
(並不是本基礎課的重點內容,所以這裡略講)
所謂錄像呢,這裡用到了一個VideoWriter對象,還有FoureCC代碼。這裡的FoureCC涉及到視頻編碼的問題。FoureCC是一個4位元組的用於確定視頻編碼格式的代碼。Win下支持DIVX編碼。那如何在代碼中生成FoureCC代碼呢?
fourecc = cv2.VideoWriter_fourcc(*DIVX)n
確定了編碼之後,我們需要一個膠捲(即VideoWriter對象),如下
out = cv2.VideoWriter(output.avi,fourcc, 20.0, (640,480))n
參數依次為文件名,編碼格式,幀頻和圖像尺寸。
貼上代碼
import numpy as npnimport cv2ncap = cv2.VideoCapture(0)n# 定義fourecc代碼nfourcc = cv2.VideoWriter_fourcc(*DIVX)n# 創建VideoWriter對象nout = cv2.VideoWriter(output.avi,fourcc, 20.0, (640,480))nwhile(cap.isOpened()):n ret, frame = cap.read()n if ret==True:n out.write(frame)n cv2.imshow(frame,frame)n if cv2.waitKey(1) & 0xFF == ord(q):n breakn else:n breakncap.release()nout.release()ncv2.destroyAllWindows()n
嗯,有沒有發現這一話講得很簡單呀?因為錄製視頻在我們後面的課程中用的不多,這裡就少講一點,有興趣的同學可以去官方指導里學習哦。重點在下一話,下一話的內容在後面的課程中用到的肥腸多!!
這一話的代碼同步在Github了:示例代碼,上一話的作業在Class 1的C1 Save Screenshots.py,錄製視頻的代碼在Class 1的C1 Save Video.py。
最後的最後
如果喜歡小林的專欄,就收藏了吧!してください!
推薦閱讀:
※OpenCV AdaBoost + Haar目標檢測技術內幕
※OpenCV玩九宮格數獨(零)——預告篇
※1.28【OpenCV圖像處理】凸包計算
※線性代數的直覺理解(5)
※1.8【OpenCV圖像處理】繪製形狀與文字