c - OpenCV 在单独的窗口中显示传入视频和修改后的视频

标签 c opencv

这应该很容易。我有一个来 self 的网络摄像头的视频流。我只是在玩图像转换等。我希望能够在一个窗口中查看原始图像(视频输入),在另一个窗口中查看转换后的视频。问题是,一旦我开始捕捉视频而不是单张图像,原始视频窗口就会显示转换后的视频。我不明白为什么。

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”窗口中显示灰度,则框架将显示为彩色。

此外,如果我继续对灰度图像应用 Sobel 操作并将结果显示在“out”中,则“in”和“out”窗口都将显示 Sobel 图像!

有什么想法吗?

最佳答案

嗯,这很奇怪,但问题似乎是使用 CV_WINDOW_AUTOSIZE?也许它在 OpenCV 2.1 中不受支持(我很确定我正在运行的是它)。无论如何,在创建窗口时使用 0 而不是 CV_WINDOW_AUTOSIZE 效果很好。

关于c - OpenCV 在单独的窗口中显示传入视频和修改后的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3982884/

相关文章:

opencv - 如何在低通滤波图像上找到轮廓?

opencv - JavaCV 中的 cvHoughCircles() 参数?

android - 在 Android 上显示位图图像 (OpenCV)

C数组在被函数修改后被破坏

c - 使用 R 和 C 中的结构减少参数数量

C -FILE I/O 分段故障核心已转储?

c - Linux 堆——做大量的新建/删除操作是否正常,或者堆是否变得严重碎片化?

python - OpenCV获得ApproxPolyDP角点?

c++ - 创建轮廓的边界框

c - 为 C/C++ 写一个宏 #include