0

cvQueryFrame() は、 にブレークポイントを置かない限り、灰色のフレームを返しますcvQueryFrame(capture)。プログラムがブレークポイントに 1 回到達するだけで、その後、カメラから適切なフレームが取得されます。遅延、ダミー フレーム、2 つの組み合わせを試しましたが、そのブレークポイントがないと機能しないようです。

cvNamedWindow("video", CV_WINDOW_AUTOSIZE);
CvCapture *capture  = cvCaptureFromCAM(1);
if (capture == NULL)
{
    return -1;
}

Mat frame;
for(int i = 0;i<10;i++)
{
    frame = cvQueryFrame(capture);
}


while(1)
{
    try
    {
    frame = cvQueryFrame(capture);
    imshow("video", frame);
    char c = cvWaitKey(1);
    if(c == 33)
        break;
    }

    catch(Exception e)
    {
        break;
    }
}
cvReleaseCapture( &capture);
cvDestroyWindow( "video" );

return 0;
4

1 に答える 1

0

cvWaitKey の値を 5 または 10 に設定してみてください。カメラは、次のフレームを送信して前のフレームを描画するのに時間がかかります。waitKey を使用すると、openCV が画像を画面に描画する時間を確保できます。フレームが正しく取得されている可能性がありますが、正しく表示されていない可能性があります。

于 2012-08-22T10:13:50.513 に答える