A. linux下怎麼用c語言獲取一幀屏幕圖像數據,怎麼分塊
如果已經映射了的話,理論上應該是直接可以memcpy的,這個方法你可以嘗試一下
圖像分塊其實很簡單,幀數據說白了就是一個很大的數組,你可以理解為二維數組
對二維數組進行切分很簡單吧。
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")));