c++opencv上的灰色屏幕

Gray screen on c++ opencv

本文关键字:屏幕 灰色 c++opencv      更新时间:2023-10-16

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

  #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 Foundn");
            break;
        }

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

我使用opencv 2.2和Visual studio 2010

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

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()一起存储到磁盘上,如果该图像正常,则意味着捕获过程实际上运行良好,问题出在其他地方。

我将openCV版本2.2切换到2.1,它的工作非常完美。。。。。。。

我使用的是OpenCV 3.1版本,我遇到了同样的问题,我重新构建了OpenCV 3.1并重新检查了环境变量,所以我的问题得到了解决。如果需要,您可以备份已构建的opencv并提取。抱歉我的英语不好:)