從視頻中獲取幀圖片
網絡傳輸數據幀
數據在網絡上是以很小的稱為幀(Frame)的單位傳輸的,幀由幾部分組成,不同的部分執行不同的功能。幀通過特定的稱為網絡驅動程序的軟件進行成型,然后通過網卡發送到網線上,通過網線到達它們的目的機器,在目的機器的一端執行相反的過程。接收端機器的以太網卡捕獲到這些幀,并告訴操作系統幀已到達,然后對其進行存儲。就是在這個傳輸和接收的過程中,嗅探器會帶來安全方面的問題 。
“幀”數據由兩部分組成:幀頭和幀數據。幀頭包括接收方主機物理地址的定位以及其它網絡信息。幀數據區含有一個數據體。為確保計算機能夠解釋數據幀中的數據,這兩臺計算機使用一種公用的通訊協議。互聯網使用的通訊協議簡稱IP,即互聯網協議。IP數據體由兩部分組成:數據體頭部和數據體的數據區。數據體頭部包括IP源地址和IP目標地址,以及其它信息。數據體的數據區包括用戶數據協議(UDP),傳輸控制協議(TCP),還有數據包的其他信息。這些數據包都含有附加的進程信息以及實際數據。
視頻圖像幀
幀——就是影像動畫中最小單位的單幅影像畫面。一幀就是一副靜止的畫面,連續的幀就形成動畫,如電視圖象等。通常說幀數,簡單地說,就是在1秒鐘時間里傳輸的圖片的幀數,也可以理解為圖形處理器每秒鐘能夠刷新幾次,通常用FPS(Frames Per Second)表示。每一幀都是靜止的圖象,快速連續地顯示幀便形成了運動的假象。高的幀率可以得到更流暢、更逼真的動畫。每秒鐘幀數 (fps) 越多,所顯示的動作就會越流暢。
關鍵幀
——任何動畫要表現運動或變化,至少前后要給出兩個不同的關鍵狀態,而中間狀態的變化和銜接電腦可以自動完成,在Flash中,表示關鍵狀態的幀叫做關鍵幀。
過渡幀
——在兩個關鍵幀之間,電腦自動完成過渡畫面的幀叫做過渡幀。
以下例出從視頻中獲取幀圖片
void video2Image()
{
//VideoCapture cap("1.avi");
VideoCapture cap("G:\CBU2_MiddleFrameDetection\imageData\拍攝視頻\10.21\直角邊\1.avi");
// 獲取視頻總幀數
long totalFrameNumber = cap.get(CAP_PROP_FRAME_COUNT);
cout << "total frames: " << totalFrameNumber << endl;
Mat frame;
bool flags = true;
while (flags) {
// 讀取視頻每一幀
cap.read(frame);
stringstream str;
str << "a2" << currentFrame << ".jpg";
cout << "正在處理第" << currentFrame << "幀" << endl;
printf(" ");
// 設置每30幀獲取一次幀
if (currentFrame % 2 == 0)
{
// 將幀轉成圖片輸出
imwrite("G:\CBU2_MiddleFrameDetection\imageData\拍攝視頻\img10.21\2" + str.str(), frame);
}
// 結束條件
if (currentFrame >= totalFrameNumber) {
flags = false;
}
currentFrame++;
}
}
審核編輯 :李倩
-
處理器
+關注
關注
68文章
19166瀏覽量
229146 -
網絡傳輸
+關注
關注
0文章
136瀏覽量
17379 -
通訊協議
+關注
關注
10文章
272瀏覽量
20324
原文標題:從視頻中獲取幀圖片
文章出處:【微信號:機器視覺沙龍,微信公眾號:機器視覺沙龍】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論