openCV可以同时使用2个网络摄像头窗口吗?

时间:2010-09-22 17:25:53

标签: c video opencv video-processing

我正在将常见的图像转换应用到我的实时网络摄像头捕获中。我想在一个窗口中显示原始网络摄像头,并在另一个窗口中显示应用了变换的图像。但是,我在两个窗口上都得到相同的图像(已过滤),我想知道我是否受到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 个答案:

答案 0 :(得分:1)

它可能!尝试将 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);