OpenCV показывает и входящее видео и измененное видео в отдельных окнах - PullRequest
3 голосов
/ 21 октября 2010

Это должно быть легко. У меня есть видео поток с моей веб-камеры. Я просто играю с преобразованием изображений и т. Д. Я хотел бы иметь возможность просматривать исходные изображения (видеовход) в одном окне и преобразованное видео в другом. Проблема в том, что как только я начинаю захватывать видео вместо отдельных изображений, в исходном окне видео отображается преобразованное видео. Я не понимаю почему.

cvNamedWindow("in", CV_WINDOW_AUTOSIZE);
cvNamedWindow("out", CV_WINDOW_AUTOSIZE);

CvCapture *fc = cvCaptureFromCAM(0);

IplImage* frame = cvQueryFrame(fc);

if (!frame) {
    return 0;
}

IplImage* greyscale = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);
IplImage* output = cvCreateImage(cvGetSize(frame),IPL_DEPTH_32F , 1);

while(1){

    frame= cvQueryFrame(fc);
    cvShowImage("in", frame);

    // manually convert to greyscale
    for (int y = 0; y < frame->height; y++) {
        uchar* p = (uchar*) frame->imageData + y* frame->widthStep; // pointer to row
        uchar* gp = (uchar*) greyscale->imageData + y*greyscale->widthStep;  
        for(int x = 0; x < frame->width; x++){
            gp[x] = (p[3*x] + p[3*x+1] + p[3*x+2])/3;   // average RGB values 
        }
    }

    cvShowImage("out", greyscale);

    char c = cvWaitKey(33);
    if (c == 27) {
        return 0;
    }
}

В этом простом примере оба видеопотока в конечном итоге отображаются в оттенках серого ... Значения указателя и визуальные данные для кадров и оттенков серого совершенно разные. Если я перестану отображать оттенки серого в окне «out», то рамка отобразится в цвете.

Кроме того, если я продолжу и применю операцию Собеля к изображению в оттенках серого и выведу результат в виде «out», то в обоих окнах «in» и «out» будет показано изображение Sobel!

Есть идеи?

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Хм. Это было странно, но, кажется, проблема в использовании CV_WINDOW_AUTOSIZE?Возможно, это не поддерживается в OpenCV 2.1 (я уверен, что я работаю).В любом случае, использование 0 вместо CV_WINDOW_AUTOSIZE при создании окон работает нормально.

0 голосов
/ 21 октября 2010

Я попробовал ваш код с openCV 2.0 под Mandriva 2010, и он отлично работает либо с CV_WINDOW_AUTOSIZE, либо с 0.

Вы можете попытаться преобразовать в оттенки серого с помощью cvCvtColor(frame,grayscale,CV_RGB2GRAY) и посмотреть, сохраняется ли проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...