Серый экран на c++ opencv

Я много искал о своей простой проблеме, но не нашел решения. Когда я запускаю свой код, черная консоль показывает мне размер кадра камеры, но в окне видео не отображается, оно показывает сплошной серый экран. Но если я воспроизвожу видео с жесткого диска, то все работает нормально. Пожалуйста, помогите мне кто-нибудь. это мой код

  #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.


person Shakkhar    schedule 13.07.2012    source источник
comment
Что выводит на черный экран? Вставьте метод getchar() под выводом в 'if(!capture)' и проверьте вывод на черном экране.   -  person praxmon    schedule 13.07.2012
comment
Я сделал это, но он остается прежним.   -  person Shakkhar    schedule 13.07.2012
comment
Вывод на черный экран? Ничего такого? У тебя есть вебкамера?   -  person praxmon    schedule 13.07.2012
comment
В черном ящике просто отображается сообщение Размер кадра камеры: 640 x 480 пикселей. Веб-камера: стационарная камера Hp ProBook 4430s. ОС: Win 7 (32-битная)   -  person Shakkhar    schedule 13.07.2012
comment
Попробуйте этот захват = cvCreateCameraCapture(-1); или захват = cvCreateCameraCapture(0);   -  person Siddiqui    schedule 13.07.2012
comment
Вы должны поменять местами cv::waitKey(20) и cvShowImage("Window", img). Размер кадра камеры... печатается более одного раза?   -  person Piotr Praszmo    schedule 13.07.2012
comment
Или попробуйте захватить = cvCaptureFromCAM(-1);   -  person Siddiqui    schedule 13.07.2012
comment
Спасибо за помощь. Я пробовал все эти идеи, но это не сработало...   -  person Shakkhar    schedule 13.07.2012
comment
@ShamsulArefin, вы проверили значение захвата? Это НУЛЬ?   -  person Siddiqui    schedule 13.07.2012
comment
@Siddiqui Нет босса, это не NULL ..   -  person Shakkhar    schedule 13.07.2012
comment
На моем компе работает нормально! Без каких-либо правок, просто скопировал ваш код!   -  person praxmon    schedule 13.07.2012
comment
Босс @ShamsulArefin, выведите на Windows cmd, пожалуйста!   -  person praxmon    schedule 13.07.2012
comment
Я обновляю драйвер веб-камеры и пробую много идей, но безуспешно. Реле не знаю в чем проблема. Я очень новичок в opencv.   -  person Shakkhar    schedule 13.07.2012
comment
Босс, у меня недостаточно репутации, чтобы загрузить изображение. Мой свет веб-камеры открыт, поэтому он работает нормально. Раньше я использовал эту веб-камеру в скайпе. Так что состояние хорошее..   -  person Shakkhar    schedule 13.07.2012
comment
@Banthar Boss я поменял местами эти два утверждения. И размер камеры печатает неограниченное время в цикле while(1).   -  person Shakkhar    schedule 13.07.2012


Ответы (3)


Одна вещь явно неверна, вам нужно изменить порядок вызовов на:

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

Во-вторых, важно проверить успешность cvQueryFrame():

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

ИЗМЕНИТЬ:

Кстати, я только что заметил, что вы смешиваете интерфейс C OpenCV с интерфейсом C++. Не делай этого! Замените cv::waitKey(50); на cvWaitKey(50);.

В целях отладки, если cvQueryFrame() завершается успешно, я предлагаю вам сохранить один кадр на диск с помощью cvSaveImage(), и если с этим изображением все в порядке, это означает, что процедура захвата на самом деле работает отлично, а проблема в чем-то другом.

person karlphillip    schedule 13.07.2012
comment
Спасибо за ответ. Я меняю свой код. Когда я сохраняю изображение с помощью cvSaveImage(), это сплошное серое изображение. Совсем не работает. - person Shakkhar; 13.07.2012
comment
Босс, могу ли я использовать opencv 2.4 для решения моей проблемы? Я думаю, что 2.2 устарела и не поддерживает мою камеру. - person Shakkhar; 13.07.2012
comment
Я только что обновил свой ответ. Попробуйте заменить cv::waitKey() на cvWaitKey() и, пожалуйста, обновите OpenCV до версии 2.4 или более поздней. - person karlphillip; 13.07.2012
comment
Босс, надеюсь, мне придется сменить камеру. Я столкнулся с той же проблемой в opencv 2.4. и я меняю cvWaitKey(), все та же проблема. - person Shakkhar; 13.07.2012
comment
Да, вам нужно протестировать другие камеры, чтобы убедиться, что это не проблема с вашим кодом. - person karlphillip; 13.07.2012
comment
Босс, я нашел на YouTube видео, в котором есть программа Visual Control. Эта программа сделана с использованием opencv и msvc 2010. Эта программа отлично использует мою веб-камеру. Итак, почему я не могу использовать свою веб-камеру в своей программе. Вот ссылка You Tube Пожалуйста, посоветуйте мне. По этой ссылке также доступен исходный код. Спасибо. - person Shakkhar; 14.07.2012
comment
В этом случае проверьте исходный код приложения и скопируйте процедуру настройки камеры (и используемые параметры) в свое приложение. - person karlphillip; 14.07.2012
comment
Вы можете найти меня в LinkedIn. Проверьте страницу моего профиля на Stackoverflow. - person karlphillip; 27.08.2012

Я просто переключаю версию openCV 2.2 на 2.1, и она отлично работает .......

person Shakkhar    schedule 10.07.2013

Я использую OpenCV версии 3.1, у меня возникла та же проблема, я пересобрал openCV 3.1 и перепроверил переменные среды, поэтому моя проблема решена. Вы можете создать резервную копию встроенного opencv и извлечь его, если вам нужно. Извините за мой плохой английский :)

person Hương Võ    schedule 11.05.2017