日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv读取视频并保存为图片

發布時間:2023/12/2 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv读取视频并保存为图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.功能:

? ? ?opencv讀取指定文件夾中的視頻文件,按照一定的間隔截取某些幀,將這些幀圖像連續命名,存儲在指定文件夾里。

2.代碼如下:

(1)IplImage

#include <stdlib.h> #include <stdio.h> #include <math.h> #include <cv.h> #include <highgui.h>void Video_to_image(char* filename,char * outfile, int interval) {//初始化一個視頻文件捕捉器CvCapture* capture = cvCaptureFromAVI(filename);//獲取視頻幀數信息cvQueryFrame(capture);int numFrames = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);//視頻幀數//printf("frame numbers : %d/n",numFrames);//定義和初始化變量int thisframe = 0;IplImage* img = 0;char image_name[100];//用來存儲保存的圖片名字while(1){img = cvQueryFrame(capture); //獲取一幀圖片if (!img || thisframe >= numFrames)//若圖像為空或超出總幀數跳出,則跳出{break;}if (thisframe % interval == 0){sprintf(image_name,"%s%s%d%s", outfile,"image", thisframe, ".jpg");//保存的圖片名cvSaveImage(image_name, img); //保存一幀圖片}thisframe++;}cvReleaseCapture(&capture);cvReleaseImage(&img); } int main() {char filename[100] = "E://C_pagram//readvideo//readvideo//readvideo//Wildlife.wmv";char outfile[100] = "E://C_pagram//readvideo//readvideo//data//";int interval = 10;//設置間隔Video_to_image(filename,outfile, interval); //輸入視頻文件路徑及名稱、幀間隔return 0; }

(2)Mat

#define _CRT_SECURE_NO_DEPRECATE#include <iostream> #include "cv.h" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;// 描述:將視頻幀轉成圖片輸出 void main() {// 獲取視頻文件 VideoCapture cap("E:\\C_pagram\\readvideo\\readvideo\\Wildlife.wmv");// 獲取視頻總幀數 long totalFrameNumber = cap.get(CV_CAP_PROP_FRAME_COUNT);cout << "total frames: " << totalFrameNumber << endl;//輸出總幀數Mat frame;bool flags = true;long currentFrame = 0;while (flags){// 讀取視頻每一幀 cap.read(frame);stringstream str;str << "_" << currentFrame << ".jpg";// 設置每50幀獲取一次幀 if (currentFrame % 50 == 0 && !frame.empty())//當圖片不為空時保存{// 將幀轉成圖片輸出 imwrite("E:\\C_pagram\\readvideo\\readvideo\\data\\image" + str.str(), frame);}// 結束條件 if (currentFrame >= totalFrameNumber){flags = false;}currentFrame++;}system("pause"); }

3.注意

(1)輸入文件路徑時,用//或者\都可以;

(2)sprintf里面圖片名稱可以組合起來,用逗號隔開,其中 outfile已經是字符串的格式,不用加雙引號;

(3)if (!img)?{break;}這句判斷沒加之前導出的圖片最后一張是空的;

(4)局部定義IplImage* img = 0;就局部釋放該指針cvReleaseImage(&img);

(5)程序(2)輸出的第一張圖為全黑的不為空,最后一張圖為空,加上判斷可以去掉最后一張空圖;

? ? ??if (currentFrame % 50 == 0 && !frame.empty())若不為空,保存

? ? ??if (currentFrame % 50 == 0 && frame.data)若frame的data有數據,保存

? ? ?以上兩種方法都可以。


總結

以上是生活随笔為你收集整理的opencv读取视频并保存为图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。