導航:首頁 > 源碼編譯 > 攝像頭源碼調試

攝像頭源碼調試

發布時間:2022-09-30 23:54:25

Ⅰ 易語言伺服器端怎麼連接客戶端的攝像頭!最好有一個簡單的源碼 就連接一個攝像頭

所用組件和支持庫、變數:

一、接收端程序編寫
1.支持庫:視頻聊天支持庫
2.接送端全局變數及組件
全局變數 音頻輸出設備, 文本型
組件 多媒體播放器 說明:播放接收到的視頻圖像
組件伺服器說明:接收視頻數據
組件時鍾 說明:用於檢測接收遠程資料庫速度
組件標簽 說明:顯示接收遠程數據數據速度
組件 窗口1 說明:設置輸出音頻
組件多媒體設備枚舉器 說明:獲取音頻設備
組件組合框 說明:列出音頻設備

3.接收視頻窗口設置-啟動窗口 .版本2
.支持庫eChat

.程序集窗口程序集2
.程序集變數視頻輸入設備數組,視頻輸入設備,,"0"
.程序集變數音頻輸入設備數組,音頻輸入設備,,"0"

.子程序_窗口1_創建完畢
.局部變數n,整數型

視頻輸入設備數組=多媒體設備枚舉器1.取視頻輸入設備列表()
音頻輸入設備數組=多媒體設備枚舉器1.取音頻輸入設備列表()
.計次循環首(取數組成員數(視頻輸入設備數組),n)
組合框_視頻輸入.加入項目(視頻輸入設備數組[n].設備名稱,)
.計次循環尾()
組合框_視頻輸入.現行選中項=0
.計次循環首(取數組成員數(音頻輸入設備數組),n)
組合框_音頻輸入.加入項目(音頻輸入設備數組[n].設備名稱,)
.計次循環尾()
組合框_音頻輸入.現行選中項=0


.子程序_按鈕1_被單擊

視頻輸入設備=視頻輸入設備數組[組合框_視頻輸入.現行選中項+1].設備路徑
音頻輸入設備=音頻輸入設備數組[組合框_音頻輸入.現行選中項+1].設備標識
銷毀()

發送端設置完成。

Ⅱ 求一個控制攝像頭小程序的源碼,要求VC下編譯運行

VC-攝像頭控制SDK源碼
#include <windows.h>
#include <stdio.h>
#include <vfw.h>
#pragma comment(lib,"vfw32.lib")

HWND ghWndCap ; //捕獲窗的句柄
CAPDRIVERCAPS gCapDriverCaps ; //視頻驅動器的能力
CAPSTATUS gCapStatus ; //捕獲窗的狀態
char szCaptureFile[] = "MYCAP.AVI";
char gachBuffer[20];

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

LRESULT CALLBACK StatusCallbackProc(HWND hWnd,int nID,LPSTR lpStatusText)
{
if(!ghWndCap)return FALSE;//獲得捕獲窗的狀態
capGetStatus(ghWndCap,&gCapStatus,sizeof(CAPSTATUS));//更新捕獲窗的大小
SetWindowPos(ghWndCap,NULL,0,0,gCapStatus.uiImageWidth,gCapStatus.uiImageHeight,SWP_NOZORDER|SWP_NOMOVE);
if(nID==0){//清除舊的狀態信息
SetWindowText(ghWndCap,(LPSTR)"hello");
return (LRESULT)TRUE;
}//顯示狀態ID和狀態文本
wsprintf(gachBuffer,"Status# %d: %s",nID,lpStatusText);
SetWindowText(ghWndCap,(LPSTR)gachBuffer);
return (LRESULT)TRUE;
}
LRESULT CALLBACK ErrorCallbackProc(HWND hWnd,int nErrID,LPSTR lpErrorText)
{
if(!ghWndCap)return FALSE;
if(nErrID==0)return TRUE;//清除舊的錯誤
wsprintf(gachBuffer,"Error# %d",nErrID);//顯示錯誤標識和文本
MessageBox(hWnd, lpErrorText, gachBuffer,MB_OK | MB_ICONEXCLAMATION);
return (LRESULT) TRUE;
}

LRESULT CALLBACK FrameCallbackProc(HWND hWnd,LPVIDEOHDR lpVHdr)
{
FILE *fp;
fp=fopen("caram.dat","w");
if(!ghWndCap)return FALSE;//假設fp為一打開的.dat文件指針
fwrite(lpVHdr->lpData,1,lpVHdr->dwBufferLength,fp);
return (LRESULT)TRUE;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
static TCHAR szAppName[]=TEXT("HelloWin");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires WindowsNT!"),szAppName,MB_ICONERROR);
return 0;
}
hwnd=CreateWindow(szAppName,TEXT("The Hello Program"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_CREATE:
{
ghWndCap=capCreateCaptureWindow((LPSTR)"Capture Window",WS_CHILD|WS_VISIBLE,0,0,300,240,(HWND)hwnd,(int)0);
capSetCallbackOnError(ghWndCap,(FARPROC)ErrorCallbackProc);
capSetCallbackOnStatus(ghWndCap,(FARPROC)StatusCallbackProc);
capSetCallbackOnFrame(ghWndCap,(FARPROC)FrameCallbackProc);
capDriverConnect(ghWndCap,0); // 將捕獲窗同驅動器連接
//獲得驅動器的能力,相關的信息放在結構變數gCapDriverCaps中
capDriverGetCaps(ghWndCap,&gCapDriverCaps,sizeof(CAPDRIVERCAPS));
capPreviewRate(ghWndCap, 66); // 設置Preview模式的顯示速率
capPreview(ghWndCap, TRUE); //啟動Preview模式
if(gCapDriverCaps.fHasOverlay) //檢查驅動器是否有疊加能力
capOverlay(ghWndCap,TRUE); //啟動Overlay模式
if(gCapDriverCaps.fHasDlgVideoSource)capDlgVideoSource(ghWndCap); //Video source 對話框
if(gCapDriverCaps.fHasDlgVideoFormat)capDlgVideoFormat(ghWndCap); // Video format 對話框
if(gCapDriverCaps.fHasDlgVideoDisplay)capDlgVideoDisplay(ghWndCap); // Video display 對話框
capFileSetCaptureFile( ghWndCap, szCaptureFile); //指定捕獲文件名
capFileAlloc(ghWndCap, (1024L * 1024L * 5)); //為捕獲文件分配存儲空間
capCaptureSequence(ghWndCap); //開始捕獲視頻序列
capGrabFrame(ghWndCap); //捕獲單幀圖像

}

return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("Hello,Windows98!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
{
capSetCallbackOnStatus(ghWndCap,NULL);
capSetCallbackOnError(ghWndCap,NULL);
capSetCallbackOnFrame(ghWndCap,NULL);
capCaptureAbort(ghWndCap);//停止捕獲
capDriverDisconnect(ghWndCap); //將捕獲窗同驅動器斷開
PostQuitMessage(0);
}
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

Ⅲ 使用c#編寫攝像頭程序,可以拍照,錄像,保存到本地。求源碼,可以直接運行的。

你沒有釋放資源。這個問題和我遇到的一模一樣。在關閉攝像頭的程序段中加上釋放資源的語句。

Ⅳ c++中打開攝像頭的源碼中,CaptureVideo.cpp。CaptureVideo.h。在CaptureVideo類的頭文件中缺少dshow.h

缺少頭文件,dx開發包里吧,給你個地址,把內容粘下來,放到一個txt里,改名為dshow.h

http://..com/question/117648893.html

Ⅳ 求用C#抓取USB攝像頭程序源碼

用C#捕獲攝像頭

你自己去瞧瞧吧!

android 實時監控硬體攝像頭如何實現 求個源碼

實時監控還是比較厲害的,後台拍攝記錄?不懂是個什麼意思,程序調用攝像頭拍照還是比較簡單的。

Ⅶ 易語言打開他人攝像頭 源碼

沒有這個易語言源碼...打開他人攝像頭必須要在他人電腦上得到硬體運行許可才行,我有其他的源碼,但是這個是真沒有,也沒有聽說過。

Ⅷ 如何實現虛擬攝像頭 directshow

本人下載的這個虛擬攝像頭源代碼:
http://download.csdn.net/detail/bifei1983/1024664

其是由DSK目錄下pushsource源碼改進而來。
調用IFilterMapper2 ::RegisterFilter 介面函數,注冊成虛擬視頻設備後,在FillBuffer里給sample數據添加了點陣圖信息。

這樣的虛擬攝像頭,可以被Amcap識別,並且也可以預覽圖像。

Ⅸ 如何利用Video4linux獲取攝像頭數據

1. 攝像頭的安裝

在Linux下常用的攝像頭驅動是spca5xx。這個網站還給出了這款驅動支持的攝像頭的種類。另外,ov511晶元直接就支持Linux,使用者款晶元的攝像頭有網眼V2000。我使用的是網眼V2000的攝像頭,和Z-Star
301p+現代7131R晶元的攝像頭。後一種需要spca5xx的驅動。關於spca5xx的安裝方法,網上有很多介紹,這里就不說了。

2. 攝像頭的調試

安裝好攝像頭後,為了測試攝像頭能否正常工作,可以用一下軟體。比較著名的是xawtv,在網上搜以下可以下載到。安裝好後,打開xawtv則可以調試攝像頭。

3. Video4Linux 編程獲取數據

現有的video4linux有兩個版本,v4l和v4l2。本文主要是關於v4l的編程。利用v4l API獲取視頻圖像一般有以下幾步:

a> 打開設備

b> 設置設備的屬性,比如圖像的亮度,對比度等等

c> 設定傳輸格式和傳輸方式

d> 開始傳輸數據,一般是一個循環,用以連續的傳輸數據

e> 關閉設備

下面具體介紹v4l編程的過程。首先指出,在video4linux編程時要包含頭文件,其中包含了video4linux的數據結構和函數定義。

1)v4l的數據結構

在video4linux API中定義了如下數據結構,詳細的數據結構定義可以參考v4l API的文檔,這里就編程中經常使用的數據結構作出說明。

首先我們定義一個描述設備的數據結構,它包含了v4l中定義的所有數據結構:
typedef struct
_v4ldevice
{int fd;//設備號
struct video_capability capability;
struct
video_channel channel[10];
struct video_picture picture;
struct video_clip
clip;
struct video_window window;
struct video_capture capture;
struct
video_buffer buffer;
struct video_mmap mmap;
struct video_mbuf
mbuf;
struct video_unit unit;
unsigned char
*map;//mmap方式獲取數據時,數據的首地址
pthread_mutex_t mutex;
int frame;
int
framestat[2];
int overlay;
}v4ldevice;
下面解釋上面這個數據結構中包含的數據結構,這些結構的定義都在中。
* struct
video_capability
name[32] Canonical name for this interface
type Type of
interface
channels Number of radio/tv channels if appropriate
audios
Number of audio devices if appropriate
maxwidth Maximum capture width in
pixels
maxheight Maximum capture height in pixels
minwidth Minimum capture
width in pixels
minheight Minimum capture height in pixels

這一個數據結構是包含了攝像頭的屬性,name是攝像頭的名字,maxwidth maxheight是攝像頭所能獲取的最大圖像大小,用像素作單位。

在程序中,通過ioctl函數的VIDIOCGCAP控制命令讀寫設備通道已獲取這個結構,有關ioctl的使用,比較復雜,這里就不說了。下面列出獲取這一數據結構的代碼:
int v4lgetcapability(v4ldevice *vd)
{
if(ioctl(vd->fd,
VIDIOCGCAP, &(vd->capability)) < 0)
{
v4lperror("v4lopen:VIDIOCGCAP");
return -1;
}
return 0;
}
*
struct video_picture
brightness Picture brightness
hue Picture hue (colour
only)
colour Picture colour (colour only)
contrast Picture
contrast
whiteness The whiteness (greyscale only)
depth The capture depth
(may need to match the frame buffer depth)
palette Reports the palette that
should be used for this image

這個數據結構主要定義了圖像的屬性,諸如亮度,對比度,等等。這一結構的獲取通過ioctl發出VIDIOCGPICT控制命令獲取。
* struct video_mbuf
size The number of bytes to
map
frames The number of frames
offsets The offset of each frame

這個數據結構在用mmap方式獲取數據時很重要:

size表示圖像的大小,如果是640*480的彩色圖像,size=640*480*3

frames表示幀數

offsets表示每一幀在內存中的偏移地址,通過這個值可以得到數據在圖像中的地址。

得到這個結構的數據可以用ioctl的VIDIOCGMBUF命令。源碼如下:
int v4lgetmbuf(v4ldevice
*vd)
{
if(ioctl(vd->fd, VIDIOCGMBUF, &(vd->mbuf))<0)
{
v4lperror("v4lgetmbuf:VIDIOCGMBUF");
return -1;
}
return
0;
}

而數據的地址可以有以下方式計算:
unsigned char
*v4lgetaddress(v4ldevice *vd)
{
return (vd->map +
vd->mbuf.offsets[vd->frame]);
}

2)獲取影像mmap方式。

在video4Linux下獲取影像有兩種方式:overlay和mmap。由於我的攝像頭不支持overlay方式,所以這里只談mmap方式。

mmap方式是通過內存映射的方式獲取數據,系統調用ioctl的VIDIOCMCAPTURE後,將圖像映射到內存中,然後可以通過前面的v4lgetmbuf(vd)函數和v4lgetaddress(vd)函數獲得數據的首地址,這是李可以選擇是將它顯示出來還是放到別的什麼地方。

下面給出獲取連續影像的最簡單的方法(為了簡化,將一些可去掉的屬性操作都去掉了):
char*
devicename="/dev/video0";
char* buffer;
v4ldevice device;
int width =
640;
int height = 480;
int frame =
0;
v4lopen("/dev/video0",&device);//打開設備
v4lgrabinit(&device,width,height);//初始化設備,定義獲取的影像的大小
v4lmmap(&device);//內存映射
v4lgrabstart(&device,frame);//開始獲取影像
while(1){
v4lsync(&device,frame);//等待傳完一幀
frame
= (frame+1)%2;//下一幀的frame
v4lcapture(&device,frame);//獲取下一幀
buffer =
(char*)v4lgetaddress(&device);//得到這一幀的地址
//buffer給出了圖像的首地址,你可以選擇將圖像顯示或保存......
//圖像的大小為
width*height*3
..........................
}
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦

Ⅹ 攝像頭深度測試指的是

對於攝像頭的最大性能的測試。
首先通過kinectsdk-v2.0-1409-setp.exe這個軟體進行調試攝像頭,然後安裝opencv用來報村16位深度圖像,利用官方所給的源碼進行深度演算法測試,在VC++中添加依賴庫,並且將demo官網中提取出來的項目代表,獲取opencv中的16bit的png圖像。最後通過C語言將深度圖轉換成偽彩色圖。

閱讀全文

與攝像頭源碼調試相關的資料

熱點內容
fx3ga用什麼編程軟體 瀏覽:498
深度學習演算法樣本數量 瀏覽:966
電腦文件夾打開畫面塊狀 瀏覽:790
固態硬碟與機械盤的加密方法 瀏覽:634
unix編譯軟體 瀏覽:563
影視製作中西書局中央編譯出版社 瀏覽:822
變數作用域是編譯器決定的嗎 瀏覽:755
linux結構分析 瀏覽:812
程序員記錄歷史 瀏覽:798
編譯器怎麼調用構造函數的 瀏覽:97
高質量cpdf 瀏覽:824
福建電信代理伺服器雲主機 瀏覽:618
美圖看看pdf 瀏覽:432
編譯後報錯 瀏覽:294
網路設備怎麼加密 瀏覽:789
hbuilderx文件夾有哪些 瀏覽:102
空調壓縮機生產板塊 瀏覽:616
開源多媒體伺服器都有什麼 瀏覽:396
反編譯了別人的app會被發現嗎 瀏覽:918
上海光裕汽車壓縮機有限公司 瀏覽:336