2

我已经搜索了很多关于我的简单问题,但我没有找到解决方案。当我运行我的代码黑色控制台向我显示相机帧大小但在窗口中视频未显示时,它显示一个纯灰色屏幕。但是,如果我从 HDD 播放视频,则它可以正常工作。请帮我一个。这是我的代码

  #include <iostream>

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

using namespace std;

int main(int argc, char** argv){

    CvCapture *capture;
    IplImage* img=0;
    cvNamedWindow("Window");
    capture = cvCreateCameraCapture( -1);
    //capture = cvCaptureFromAVI("1.mp4");
    //capture = cvCaptureFromCAM(-1);

    int ext=0;

    assert( capture );


    if(capture==NULL){
        cout<<"Cam Not Found!!!"<<endl;
        getchar();
        return -5;
    }
    while ( true ){

        img = cvQueryFrame( capture );

        cvSaveImage("1.jpg",img);

        if (!img){
            printf("Image not Found\n");
            break;
        }


        cvShowImage("Window", img);
        cvWaitKey(50);
    }
    cvReleaseImage(&img);
    cvDestroyWindow("Window");
    cvReleaseCapture(&capture);

    return 0;
}

我使用 opencv 2.2 和 Visual Studio 2010

4

3 回答 3

2

一件事显然是错误的,您需要将调用顺序更改为:

cvShowImage("Window", img);
cv::waitKey(20);

其次,检查是否成功至关重要cvQueryFrame()

img = cvQueryFrame( capture );
if (!img)
{
    // print something
    break;
}

编辑:

顺便说一句,我刚刚注意到您将 OpenCV 的 C 接口与 C++ 接口混合在一起。不要那样做!替换cv::waitKey(50);cvWaitKey(50);

出于调试目的,如果cvQueryFrame()成功,我建议您使用 将一帧存储到磁盘cvSaveImage(),如果该图像正常,则表示捕获过程实际上运行良好,而问题出在其他地方。

于 2012-07-13T12:10:01.410 回答
0

我刚刚将 openCV 2.2 版切换到 2.1 版,它的工作完美.......

于 2013-07-10T13:29:33.190 回答
0

我正在使用 OpenCV 3.1 版,我遇到了同样的问题,我重新构建了 openCV 3.1 并重新检查了环境变量,所以我的问题解决了。如果需要,您可以备份内置的 opencv 并提取。对不起,我的英语不好 :)

于 2017-05-11T08:27:12.730 回答