OpenCV读取视频流转至图片序列保存
来源:互联网 发布:淘宝apple store可靠么 编辑:程序博客网 时间:2024/05/16 10:09
前言:记录自己工作中用到的一些小知识!
在做图像处理的时候,经常需要将视频流装换至一帧一帧的图片序列,这时候可以借用OpenCV提供的函数。此外,
除了将转换后的图片序列以灰度图格式保存下来,代码中还包括图片缩放至原先定好的大小,具体使用的OpenCV函数
包括以下几个:
CvCapture* cvCreateFileCapture(const char* filename)//视频流分配和初始化CvCapture结构体 IplImage* cvQueryFrame(CvCapture* capture)//返回视频帧的位置 double cvGetCaptureProperty(CvCapture* capture, int property_id)//获取视频流属性,具体属性参考官网 IplImage* cvCreateImage(CvSize size, int depth, int channels)//创建格式图片 void cvCopy(const CvArr* src, CvArr* dst, const CvArr* mask=NULL)//复制单通道图像 void cvCvtColor(const CvArr* src, CvArr* dst, int code)//颜色通道转换 void cvResize(const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR)//缩放图像尺寸 void cvReleaseImage(IplImage** image)//释放已创建的图像 void cvReleaseCapture( CvCapture** capture )//释放已分配的CvCapture结构体
具体实现的C代码可参考如下:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include "cv.h"#include "highgui.h"int main(){ FILE *FpFrm = NULL; unsigned char* TmpBuf = NULL; unsigned int iFrmNum = 0; char OutFrm[1024]; CvSize cvFrmSize; CvSize cvFrmReSize; CvCapture *cvFrm; IplImage *iFrm; IplImage *iGrayFrm; IplImage *iReSizeFrm; cvFrm = cvCreateFileCapture("E:\\Test.avi"); assert(cvFrm); iFrm = cvQueryFrame(cvFrm); cvFrmSize = cvSize((S32)cvGetCaptureProperty(cvFrm, CV_CAP_PROP_FRAME_WIDTH), (S32)cvGetCaptureProperty(cvFrm, CV_CAP_PROP_FRAME_HEIGHT)); cvFrmReSize.width = 720; cvFrmReSize.height = 640; TmpBuf = (uchar*)malloc(cvFrmReSize.width * cvFrmReSize.height * sizeof(U8)); while ((iFrm = cvQueryFrame(cvFrm)) != NULL) { iGrayFrm = cvCreateImage(cvFrmSize, IPL_DEPTH_8U, 1); iReSizeFrm = cvCreateImage(cvFrmReSize, IPL_DEPTH_8U, 1); sprintf(OutFrm, "E:\\Picture\\%d.y", iFrmNum); FpFrameY = fopen(OutFrm, "wb"); if (!FpFrm) { printf("Error: Failed to Open File!\n"); } if (iFrm->nChannels == 1) { cvCopy(iFrm, iGrayFrm, 0); } else { cvCvtColor(iFrm, iGrayFrm, CV_RGB2GRAY); } cvResize(iGrayFrm, iReSizeFrm, CV_INTER_LINEAR); for (int i = 0; i < cvFrmReSize.height; i++) { for (int j = 0; j < cvFrmReSize.width; j++) { TmpBuf[i * cvFrmReSize.width + j] = iReSizeFrm->imageData[i * cvFrmReSize.width + j]; } } fwrite(TmpBuf, sizeof(U8), cvFrameYReSize.width * cvFrameYReSize.height, FpFrameY); fclose(FpFrm); cvReleaseImage(&iGrayFrm); cvReleaseImage(&iReSizeFrm); iFrmNum++; } cvReleaseCapture(&cvFrm); free(TmpBuf);}
0 0
- OpenCV读取视频流转至图片序列保存
- Opencv读取和保存视频
- Opencv读取和保存视频
- opencv截取视频图片保存
- opencv读取视频,摄像头,保存视频代码
- 用opencv读取视频保存视频
- opencv读取、显示、保存图片
- opencv图片序列合成视频
- opencv批量读取图片批量保存图片
- opencv读取视频保存成图像
- 视频的读取与保存opencv
- Qt+OpenCV摄像头读取保存回放视频
- OpenCV读入图片序列进行HOG行人检测并保存为视频
- OpenCV读入图片序列进行HOG行人检测并保存为视频
- OpenCV读入图片序列进行HOG行人检测并保存为视频
- opencv读取多个摄像头并保存当前视频流图片
- OpenCV读取视频和图像序列
- OpenCV读取视频和图像序列
- Java中各种修饰符与访问修饰符的说明
- 【机器学习实战-python3】线性回归
- java SE 第六章 面向对象(下)
- 周四学习Linux指令(一)
- poj 2379 (快速建立素数表+尺取法)
- OpenCV读取视频流转至图片序列保存
- 九度OJ-题目1045 百鸡问题
- 设计模式之单例模式的优化
- 【图像特征提取12】OpenCv的SIFT图像局部特征提取描述算法C++代码的实现
- 九度1019简单计算器到带括号的计算器
- 团体程序设计天梯赛-练习集 L2-006. 树的遍历 解题报告
- (二叉排序树)HDU 3791 二叉搜索树
- 70. Climbing Stairs
- storyboard Navigation 中间视图