1

videoInput ライブラリ、OpenCV 2.4.3、および VS2010 Express を使用して、2 つ以上の MSFT LifeCam HD-3000 からビデオを Mat タイプにキャプチャしようとしています。

ネットワーク内のウェブカメラから画像をキャプチャして送信する最も効率的な方法の例に従いましたが、うまくいきました 。

ここで、IplImage 型を C++ の Mat 型に置き換えたいと考えています。私は次の例に従おうとしました: 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;
    }

出力は罫線付きの画像です (つまり、最初の線は正しいように見えますが、2 番目の線は正しくないように見え、3 番目の線は正しく、4 番目の線は外れているように見えます)。これは、ステップ部分が間違っているか、取得していない IplImage タイプと Mat タイプの間に何らかの違いがあることを示唆しています。すべてのパラメーターを確認/変更しようとしましたが、何も見つかりません。

videoInput ライブラリから Mat 型に画像をロードする際に、かなり一般的な問題と思われる問題に直面している人に、回答が役立つことを願っています。

前もって感謝します!

4

1 に答える 1

1

試す

cv::Mat image(height, width, CV_8UC3, yourBuffer, Mat::AUTO_STEP);
于 2012-11-07T08:15:08.047 に答える