2012-11-07 125 views
1

我想從兩個或更多的MSFT LifeCam HD-3000s使用videoInput庫,OpenCV 2.4.3和VS2010 Express捕獲視頻到Mat類型。OpenCV 2.4.3和視頻輸入到墊子

我跟着例子:Most efficient way to capture and send images from a webcam in a network,它運作良好。

現在我想用C++ Mat類型替換IplImage類型。我試圖按照這個例子:下面opencv create mat from camera data

這給了我:

VI = new videoInput; 
    int CurrentCam = 0; 
    VI->setupDevice(CurrentCam,WIDTH,HEIGHT); 
    int width = VI->getWidth(CurrentCam); 
    int height = VI->getHeight(CurrentCam); 
    unsigned char* yourBuffer = new unsigned char[VI->getSize(CurrentCam)]; 
    cvNamedWindow("test",1); 
    while(1) 
    { 
     VI->getPixels(CurrentCam, yourBuffer, false, true); 
     cv::Mat image(width, height, CV_8UC3, yourBuffer, Mat::AUTO_STEP); 
     imshow("test", image); 
     if(cvWaitKey(15)==27) break; 
    } 

輸出是線形圖像(即,它看起來像第一行是正確的,但第二行似乎關閉,第三次正確,第四次等)。這表明步驟部分是錯誤的,或者IplImage類型和Mat類型之間存在一些不同。我試圖查看/更改所有參數,但我找不到任何東西。

希望這個答案能夠幫助那些面對將視頻輸入庫中的圖像加載到Mat類型時出現相當普遍的問題的人。

在此先感謝!

回答

1

嘗試

cv::Mat image(height, width, CV_8UC3, yourBuffer, Mat::AUTO_STEP); 
+0

非常感謝!它現在工作完美。第二個示例使用寬度 - 高度順序,但使用構造函數的Size結構。這扔我在這裏。 – user1805103

+0

行cols的方式混淆了那些用於寬高的人。 – luhb