2012-01-20 42 views
0

之間的困惑,我使用羅技pro9000高清網絡攝像頭。其中有2 mp zeiss lence,可以捕捉高清視頻等。我的代碼[不完全相同,但集成在單一功能中。實際分辨率/插位圖格式

現在,如果我使用分辨率高達1600×1200的一切問題,工作正常。和接收的字節大小如下

for 640 x 480 VideoHeader.dwBytesUsed are 921600 
for 1600 x 1200 VideoHeader.dwBytesUsed are 5760000 
from 1600 x 1200 to 3264 x 2448 VideoHeader.dwBytesUsed are 5760000 

但是從1600×1200字節大小是一樣的1600×1200,但我的程序不能隱蔽數據爲位圖我的事件儘量位圖的大小設置爲更高的分辨率1600 x 1200,但沒有任何作品我只得到底部模糊或拉伸預覽位圖底部的多個圖像。 我知道,這就是所謂的插值 我的問題是,其中插在驅動器,我訪問或通過公司 給出的相機應用程序實際執行的方式做我得到插值數據或者我要實現我的程序算法。 什麼困惑我的是,如果駕駛員仍返回1600×1200倍的圖像和軟件從羅技插補圖像3264 X 2448的大小,如果這是一個情況,爲什麼我沒有收到來自設備的事件將1600×1200像我設置視頻格式的初始化代碼3264 X 2448 [我已設置位24和相機使用Format24bppRgb像素格式] 誰能幫助我!....

我的代碼是

Private Sub FrameCallBack(ByVal lwnd As IntPtr, ByVal lpVHdr As IntPtr) 
    Dim _SnapSize As Size = New Size(640, 480) 
    'Dim _SnapSize As Size = New Size(1600, 1200) 
    Dim _SnapSize As Size = New Size(3264, 2448) 
    Dim VideoHeader As New Avicap.VIDEOHDR 
    Dim VideoData(-1) As Byte 
    VideoHeader = CType(Avicap.GetStructure(lpVHdr, VideoHeader), Avicap.VIDEOHDR) 
    VideoData = New Byte(VideoHeader.dwBytesUsed - 1) {} 
    Marshal.Copy(VideoHeader.lpData, VideoData, 0, VideoData.Length) 
    Dim _SnapFormat As System.Drawing.Imaging.PixelFormat = PixelFormat.Format24bppRgb 
    Dim outBit As Bitmap 
    If Me.IsValidData Then 
     outBit = New Bitmap(_SnapSize.Width, _SnapSize.Height, _SnapFormat) 
     Dim bitData As BitmapData 
     bitData = outBit.LockBits(New Rectangle(Point.Empty, _SnapSize), ImageLockMode.WriteOnly, _SnapFormat) 
     outBit.UnlockBits(bitData) 
     GC.Collect() 
     GC.WaitForPendingFinalizers() 
    End If 
End Sub 

回答

0

首先真的很抱歉,我完全忘了這個問題

的答案是 - 這些結構適用於本機API。

我的相機是200萬像素的透鏡和我在1600×1200 分辨率得到適當的圖像的數學簡單

1600×1200 = 1920000總像素

像素格式24 BPP裝置3字節爲每個像素的圖像總大小是5760000

該鏡頭不能再產生超過2 mb的數據,這就是爲什麼1600x1200是這臺相機的硬件分辨率限制,硬件不負責更高分辨率圖像的插值,這就是爲什麼我必須在getti後手動完成從相機中取出原始圖像。

這是我做了什麼;我捕捉1600x1200的圖像並編寫圖像處理算法以創建插值並提高圖像的質量。 項目正在爲文檔掃描創建一個便宜的掃描設備。成功完成並由我們的客戶使用。