Возможно ли одновременное использование двух окон веб-камеры с openCV? - PullRequest
2 голосов
/ 22 сентября 2010

Я применяю обычные преобразования изображений для захвата моей веб-камеры в режиме реального времени. Я хочу отобразить исходную веб-камеру в одном окне, а изображение с преобразованиями, примененными в другом окне. Тем не менее, я получаю одно и то же изображение (фильтруется) в обоих окнах, мне интересно, ограничен ли я OpenCV API или я что-то упускаю? Мой фрагмент кода выглядит как -

/* allocate resources */
cvNamedWindow("Original", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Filtered", CV_WINDOW_AUTOSIZE);
CvCapture* capture = cvCaptureFromCAM(0);

do {    
    IplImage* img = cvQueryFrame(capture);
    cvShowImage("Original", img);           

    Filters* filters = new Filters(img);
    IplImage* dst = filters->doSobel();
    cvShowImage("Filtered", dst);

    cvWaitKey(10);      
} while (1);

/* deallocate resources */
cvDestroyWindow("Original");
cvDestroyWindow("Filtered");
cvReleaseCapture(&capture);

1 Ответ

1 голос
/ 22 сентября 2010

Это возможно!Попробуйте скопировать img в другой IplImage перед отправкой на обработку и посмотрите, сработает ли это в первую очередь.

Да, я знаю, что вы собираетесь сказать.Но сначала попробуйте это и посмотрите, будет ли это то, что вы хотите.Приведенный ниже код просто для иллюстрации того, что вы должны делать, я не знаю, будет ли это работать:

/* allocate resources */
cvNamedWindow("Original", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Filtered", CV_WINDOW_AUTOSIZE);
CvCapture* capture = cvCaptureFromCAM(0);    

do {    
    IplImage* img = cvQueryFrame(capture);
    cvShowImage("Original", img);           

    IplImage* img_cpy = cvCreateImage(cvGetSize(img), 8, 3);
    img_cpy = cvCloneImage(img);

    Filters* filters = new Filters(img_cpy);
    IplImage* dst = filters->doSobel();
    cvShowImage("Filtered", dst);

    /* Be aware that if you release img_cpy here it might not display 
     * the data on the window. On the other hand, not doing it now will
     * cause a memory leak.
     */
    //cvReleaseImage( &img_cpy );  

    cvWaitKey(10);      
} while (1);

/* deallocate resources */
cvDestroyWindow("Original");
cvDestroyWindow("Filtered");
cvReleaseCapture(&capture);
...