使用opencv:从视频中获取每一帧图片
来源:互联网 发布:泛泰主义知乎 编辑:程序博客网 时间:2024/06/04 19:16
使用opencv:从视频中获取每一帧图片
★ C实现
当前目录:~/test/opencv/getframe
,在此目录中创建getframe.cpp
和CMakeLists.txt
- getframe.cpp
#include <stdio.h>#include <opencv2/opencv.hpp>#include <sys/stat.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <errno.h>using namespace cv;int main(int argc, char** argv ) { if ( argc != 2 ) { printf("usage: ./getframe <Video_Path>\n"); return -1; } CvCapture* cvCap = cvCaptureFromFile(argv[1]);// argv[1] is video name const char *winName = "Show Frames"; cvNamedWindow(winName,CV_WINDOW_AUTOSIZE); // output directory char dirName[512] = {0}; char *p = strrchr(argv[1], '/'); strcpy(dirName, p+1); p = strchr(dirName, '.'); *p = '_'; printf("output dir: %s\n", dirName); struct stat dirInfo = {0}; int statRet = stat(dirName, &dirInfo); if (statRet == -1 && errno == ENOENT) { int ret = mkdir(dirName, 0775); if (ret == 0) { printf("mkdir success: %s\n", dirName); } else { printf("mkdir failed: %s\n", dirName); return -1; } } printf("press any key to stop.\n"); int id = 1; while(1) { IplImage* img = cvQueryFrame(cvCap); if (img == NULL) { printf("No more frames, press any key to exit.\n"); break; } cvShowImage(winName, img); char name[512] = {0}; sprintf(name, "./%s/%04d.jpg", dirName, id); cvSaveImage(name, img); id++; int key = cvWaitKey(1000/33);// 30 frame/second for displaying in window } cvReleaseCapture(&cvCap); waitKey(0); cvDestroyWindow(winName); return 0;}
- CMakeLists.txt
cmake_minimum_required(VERSION 2.8)project( getframe )find_package( OpenCV REQUIRED )add_executable( getframe getframe.cpp )target_link_libraries( getframe ${OpenCV_LIBS} )
编译:(当前目录:~/test/opencv/getframe
)
mkdir buildcd buildcmake ..make
生成getframe可执行程序。
运行:
./getframe ../Megamind.avi
在build目录中的Megamind_avi
目录中是获取的视频的每一帧图片。
★ C++实现
#include <stdio.h>#include <opencv2/opencv.hpp>#include <sys/stat.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <errno.h>using namespace cv;int main(int argc, char** argv ) { if ( argc != 2 ) { printf("usage: getframe <Video_Path>\n"); return -1; } VideoCapture cap(argv[1]); if(!cap.isOpened()) { printf("video is not ready\n"); return -1; } // output directory char dirName[512] = {0}; char *p = strrchr(argv[1], '/'); strcpy(dirName, p+1); p = strchr(dirName, '.'); *p = '_'; printf("output dir: %s\n", dirName); struct stat dirInfo = {0}; int statRet = stat(dirName, &dirInfo); if (statRet == -1 && errno == ENOENT) { int ret = mkdir(dirName, 0775); if (ret == 0) { printf("mkdir success: %s\n", dirName); } else { printf("mkdir failed: %s\n", dirName); return -1; } } printf("press any key to stop.\n"); const char *winName = "Show Frames"; namedWindow(winName, 1); Mat frame; int id = 1; while(1) { cap.grab(); if (!cap.retrieve(frame)) { printf("No more frames, press any key to exit.\n"); break; } char name[512] = {0}; sprintf(name, "%s/%04d.jpg", dirName, id); imshow(winName, frame); imwrite(name, frame); id++; if(waitKey(30) >= 0) break; } cap.release(); waitKey(0); cvDestroyWindow(winName); return 0;}
★ 参考
https://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html
python版的,可以参考:
https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html
阅读全文
0 0
- 使用opencv:从视频中获取每一帧图片
- OpenCV之从视频获取每一帧图像
- 从视频中获取每一帧图片(包括第一帧)
- iOS 之从影片中获取每一帧图片
- 使用MATLAB获取视频中每一帧的图像
- 通过OPENCV从视频中获取图片并保存
- opencv从两路视频中获取图片
- opencv把视频的每一帧保存为图片
- 关于opencv从视频获取单帧图片函数cvQueryFrame
- opencv提取视频每一帧
- IOS获取视频每一帧的图片方法
- 获取视频的每一帧,并保存为.jpg图片
- opencv中读取视频每一帧并且单独保存
- 从影片中获取每一帧图片(包括第一帧)
- 从影片中获取每一帧图片(包括第一帧)
- opencv提取视频每一帧图片及图片转换为视频
- 【opencv】从视频中获取多帧图像
- OpenCV 从视频中获取背景
- 支付宝支付配置
- 【数据结构】顺序表的实现
- 多机分布式系统ID的问题与处理
- 个人总结61
- 【区块链开发指南】区块链进阶
- 使用opencv:从视频中获取每一帧图片
- JSON schema简介
- 2-SAT
- css3知识整理
- HDU
- meaven 配置mybatis generator jdbc 6.0 generatorConfig配置文件
- 553.Optimal Division
- 欢迎使用CSDN-markdown编辑器
- dubbo--5.添加dubbo