当前位置:首页 » 编程语言 » c语言获取视频每一帧数据
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言获取视频每一帧数据

发布时间: 2022-03-08 19:15:52

A. linux下怎么用c语言获取一帧屏幕图像数据,怎么分块

  1. 如果已经映射了的话,理论上应该是直接可以memcpy的,这个方法你可以尝试一下

  2. 图像分块其实很简单,帧数据说白了就是一个很大的数组,你可以理解为二维数组

    对二维数组进行切分很简单吧。

B. 如何利用opencv 从一段AVI视频中获取每一帧的图像

// 该程序实现视频和图片的相互转换.
// Image_to_video()函数将一组图片合成AVI视频文件.
// Video_to_image()函数将AVI视频文件读入,将每一帧存储为jpg文件.
//
////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>
#define NUM_FRAME 300 //只处理前300帧,根据视频帧数可修改

void Video_to_image(char* filename)
{
printf("------------- video to image ... ----------------\n");
//初始化一个视频文件捕捉器
CvCapture* capture = cvCaptureFromAVI(filename);
//获取视频信息
cvQueryFrame(capture);
int frameH = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
int frameW = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
int numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
printf("\tvideo height : %d\n\tvideo width : %d\n\tfps : %d\n\tframe numbers : %d\n", frameH, frameW, fps, numFrames);
//定义和初始化变量
int i = 0;
IplImage* img = 0;
char image_name[13];

cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE );
//读取和显示
while(1)
{

img = cvQueryFrame(capture); //获取一帧图片
cvShowImage( "mainWin", img ); //将其显示
char key = cvWaitKey(20);

sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");//保存的图片名

cvSaveImage( image_name, img); //保存一帧图片

if(i == NUM_FRAME) break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("mainWin");
}

void Image_to_video()
{
int i = 0;
IplImage* img = 0;
char image_name[13];
printf("------------- image to video ... ----------------\n");
//初始化视频编写器,参数根据实际视频文件修改
CvVideoWriter *writer = 0;
int isColor = 1;
int fps = 30; // or 25
int frameW = 400; // 744 for firewire cameras
int frameH = 240; // 480 for firewire cameras
writer=cvCreateVideoWriter("out.avi",CV_FOURCC('X','V','I','D'),fps,cvSize(frameW,frameH),isColor);
printf("\tvideo height : %d\n\tvideo width : %d\n\tfps : %d\n", frameH, frameW, fps);
//创建窗口
cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE );
while(i<NUM_FRAME)
{
sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");
img = cvLoadImage(image_name);
if(!img)
{
printf("Could not load image file...\n");
exit(0);
}
cvShowImage("mainWin", img);
char key = cvWaitKey(20);
cvWriteFrame(writer, img);
}
cvReleaseVideoWriter(&writer);
cvDestroyWindow("mainWin");
}

int main(int argc, char *argv[])
{
char filename[13] = "infile.avi";
Video_to_image(filename); //视频转图片
Image_to_video(); //图片转视频
return 0;
}
//---------------------------------------------------

C. 如何抽出视频中每一帧

1.可以使用会声会影,它就可以一帧一帧地显示,然后再视频快照,就可以把每一帧
都提取出来.
2.可以使用Photoshop的动画功能,导入——从视频帧到图层.

D. 如何快速获取视频信息(如码率,帧数,分辨率等)

可以用kmplayer打开视频,查看属性,就能得到视频的这些信息了,kmplayer是一款韩国制造支持中文的强大播放器,免费,编解码插件非常齐全!

E. 如何将视频的每一帧提取出来

进下载吧网站搜索超级转霸 (注意软件下载页面评论地方有注册码)下载 安装 然后添加视频到该软件 选择转换图片格式 Jpeg 或者其他图片格式 确认转换 就吧视频所有帧都以图片的形式提取出来了

F. 如何用visual studio提取视频的每帧图像

跟VC6一样 vc6下opengl的开发环境配置 一、下载并安装glut库 opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(Program Files\Microsoft Visual Studio\VC98\Include\GL文件夹”)。把解压得到的glut.h放到这个文件夹。 3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(Program Files\Microsoft Visual Studio\VC98\lib”文件夹)。 4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32) 二、vc工程配置: 1)创建一个工程。glut 是一个console project ,你创建的时候必须创建console 以对应 . 2)链接OpenGL libraries。在Visual C++中先单击Project,再单击Settings,再找到Link单击,在“分类”(Category)组合框里选择“输出”(output) ,再在“入口点”(Entry-point symbol)文本框里键入“mainCRTStartup” ,对一个现有的控制台应用程序,有一个简单的办法把它转换成Win32应用程序,这样可以摆脱那个命令行窗口。 3)单击Project Settings中的C/C++标签,将Preprocessor definitions 中的_CONSOLE改为__WINDOWS。最后单击OK。 增加下面的文件到“对象/库模块" (Object/library/moles):OpenGL32.lib glut32.lib glu32.lib (有时候不需要glut32.lib) 4)然后在stdafx.h文件中加入 #include <windows.h> #include <GL/glu.h> #include <GL/gl.h> #include <GL/glut.h> #include <GL/glaux.h> 注意:#include 是需要的,不引入的话有时会报错。 完成后,就可以编写你自己的程序了。 .

G. 如何用C语言对摄像头的每一帧进行实时分析

为什么不尝试使用opencv? C是太麻烦了。

H. 如何用c语言提取mpeg2格式视频中每一帧的大小

如果放宽条件的话,可以用opencv,很方便的一个库。

I. c#中如何提取视频文件中的帧啊

具体实现方法如下:

读取方式:使用ffmpeg读取,所以需要先下载ffmpeg。网上资源有很多。

通过ffmpeg执行一条CMD命令可以读取出视频的帧高度和帧宽度信息。

蓝线框中可以看到获取到的帧高度和帧宽度。

J. 用C语言怎样才能将普通摄像头获得的视频变成可以处理的数据啊

数据库读出的JPG文件的字符流,转换成图片显示在页面上的相关代码
转图片的到有,那个的话是转换成视频流
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
ServletOutputStream out = res.getOutputStream();
Statement dispStmt = null, setStmt = null;
try {
dispStmt = Con.createStatement();
setStmt = Con.createStatement();
setStmt.executeUpdate("set textsize 2048000");
} catch (Exception e) {
out.println("Create Statement error:" + e.toString() + "<br>");
}

String ls_sql = null;
ls_sql = req.getParameter("ImageSQL");
if (ls_sql == null)
ls_sql = "";
ls_sql = ls_sql.trim();
if (!ls_sql.equals("")) {
ResultSet rs = null;
try {
rs = dispStmt.executeQuery(ls_sql);
} catch (Exception e) {
System.out.println(
"Unable to Exec Statment" + e.toString() + "<br>");
}
try {
while (rs.next()) {
try {
res.setContentType("image/jpeg");
InputStream is = rs.getBinaryStream(1);
int size = is.available();
byte[] bzp = new byte[size];
is.read(bzp);
out.write(bzp);
} catch (Exception e) {
System.out.println("Wirte image error: " + e.toString());
}
}
rs.close();
} catch (Exception e) {
System.out.println("Unable to Close Statment" + e.toString());
}
}
try {
dispStmt.close();
} catch (Exception e) {
System.out.println("Close Statement Error: " + e.toString());
}
out.close();
}

--------------------------------------------------------------------------------

再附一个:

从库中读图片显示到页面上的主要源码
<%@ page contentType="text/html;charset=iso8859_1"%>
<%@ page import="java.sql.ResultSet"%>
<jsp:useBean id="query" class="pub.MakeDB"/>
<%
String sql = "select * from images";
ResultSet rs = query.executeQuery(sql);
rs.next();
InputStream in = rs.getBinaryStream("image");
ServletOutputStream sos = response.getOutputStream();
int len = 0;
byte[] b = new byte[1024];
response.reset();
response.setContentType("image/gif");
while((len = in.read(b)) > 0)
sos.write(b,0,len);
in.close();
sos.close();
query.cls();
%>
如果是写到文件只要把sos
定义为DataOutputStream sos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("/a.gif")));