2014-12-13 26 views
-1

我正在使用C920 Logitech網絡攝像機物體識別項目試圖修改Videocapture :: retrieve()樂趣

我想使用我自己的H264解碼器解碼來自攝像機的壓縮流(不關心現在的性能和時序,這將受到我的H264解碼器的影響)。

我想破解bool VideoCapture::retrieve(Mat& image, int channel=0)並用我的H264解碼器替換opencv retrive()函數的解碼器調用。
我關心返回類型以及兩個解碼器功能的參數列表(都是類似的)。
但我面臨以下問題在集成/修改我的示例代碼。 所以我的查詢是下面:

I am using OPENCV 3.0 VERSION . 

Q.1)下面的示例代碼,我得到錯誤 -

#include "precomp.hpp" 
#include "opencv2/opencv.hpp" 

#include <strmif.h> 
#include <iostream> 

using namespace std ; 
using namespace cv; 

struct _AMMediaType; 
typedef _AMMediaType AM_MEDIA_TYPE; 

DEFINE_GUID(FORMAT_VideoInfo,0x05589f80,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a); 
DEFINE_GUID(MEDIATYPE_Video,0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); 
DEFINE_GUID(MEDIASUBTYPE_RGB24,0xe436eb7d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); 


int main(int, char**) 
{ 
    int t1= 10; 
    int t2= 10; 
    VideoCapture cap(0); // open the default camera 
    cap.set(3,1280); 
    cap.set(4,800); 
    AM_MEDIA_TYPE mt; 
    ZeroMemory(&mt,sizeof(AM_MEDIA_TYPE)); 

    mt.majortype  = MEDIATYPE_Video; 
    mt.subtype  = MEDIASUBTYPE_RGB24; 
    mt.formattype = FORMAT_VideoInfo; 

    if(!cap.isOpened()) // check if we succeeded 
     return -1; 

    for(;;) 
    { 

     Mat frame; 
     if(!cap.grab()) 
     { 
      cout << "Can not grab images." << endl; 
      return -1; 
     } 
     cap.retrieve(frame); 
     imshow("cameracapture", frame); 

     if(waitKey(30) >= 0) break; 
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor 
    return 0; 
} 

我收到下面的鏈接錯誤:

1>main.obj : error LNK2001: unresolved external symbol FORMAT_VideoInfo 
1>main.obj : error LNK2001: unresolved external symbol MEDIATYPE_Video 
1>main.obj : error LNK2001: unresolved external symbol MEDIASUBTYPE_RGB24 

我聯繫所有的lib中我的項目屬性(通過使用VS2012),但沒有運氣:(

Q.2)在OpenCV3.0 \模塊\ videoio \ SRC \ cap_dshow.cpp文件:

mt.majortype  = MEDIATYPE_Video; 
    mt.subtype  = MEDIASUBTYPE_RGB24; 
    mt.formattype = FORMAT_VideoInfo; 

正如我的LOGITECH C920相機支撐H264編解碼器,所以我試圖修改上述變量和下面的代碼行中加入我的樣本代碼 -

mt.majortype  = MEDIATYPE_Video; 
    mt.subtype  = MEDIASUBTYPE_H264; 
    mt.formattype = FORMAT_VideoInfo; 

我有以下錯誤:

main.obj :error C2065: 'MEDIASUBTYPE_H264' : undeclared identifier 

什麼必要的修改,以獲得H264壓縮視頻

Q-3)如果我將自己修改OpenCV代碼,那麼我怎樣才能構建完整的OPENCV3.0代碼(在VS2012的窗口中進行修改)並將其用於我的目的?

回答

1

您需要定義INITGUID以解決上述鏈接器錯誤(有關詳細信息,請參閱Referencing GUIDs)。

但是我不明白它將如何幫助您提供H.264解碼器(距離那裏太遠)。

要引用H.264亞型標識需要

#include <wmcodecdsp.h> 
#pragma comment(lib, "wmcodecdspuuid.lib") 
+0

感謝羅馬。您的回覆我有很大幫助解決第一個查詢我問。我是主要集中在第二查詢H264。我沒找到DEFINE_GUID(MEDIASUBTYPE_H264,....)解決第二個查詢 – Ashwin 2014-12-13 08:07:50

+0

我已添加followiong行代碼:// H264 // 34363248-0000-0010-8000-00aa00389b71 DEFINE_GUID(MEDIASUBTYPE_H264,0x34363248,0x0000,0x0010,0x80,0x00,0x00,0xAA,0x00, 0x38,0x9B,0x71); // 34363268-0000-0010-8000-00AA00389B71 DEFINE_GUID(MEDIASUBTYPE_h264,0x34363268,0x0000,0x0010,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71); – Ashwin 2014-12-13 08:23:54

+0

你可以告訴我,如何構建OPENCV代碼,如果我將修改任何一個opencv代碼源文件(我正在使用VS2012的windows 7) – Ashwin 2014-12-13 08:32:01