来自带有 Opencv C 程序的网络摄像头的灰色图像,但 C++ 程序完美运行

Posted

技术标签:

【中文标题】来自带有 Opencv C 程序的网络摄像头的灰色图像,但 C++ 程序完美运行【英文标题】:Gray image from Webcam with Opencv C program but C++ program works perfectly 【发布时间】:2015-03-12 07:47:51 【问题描述】:

我正在尝试获取网络摄像头直播。这是我的 C 程序:

int main()

    cvNamedWindow("Webcam feed", 1);
    printf("Checking if camera is working\n");
    CvCapture *cap = cvCaptureFromCAM(0);
    if (!cap)
    
        printf("Error opening camera\n");
        return -1;
    

    printf("yes it is in loop");
    IplImage *frame = cvQueryFrame(cap);
    if (!frame)
    
        printf("Error in capturing frames from webcam\n");
        return -1;
    
    cvSaveImage("C:/Users/shru/Desktop/mee.jpg", frame);
    key = cvWaitKey(10);
    if (char(key) == 27)
    
        return -1;
    
    cvReleaseCapture(&cap);
    cvDestroyWindow("Webcam Feed");
    return 0;

这是我的 C++ 程序:

int main(int, char**)

    VideoCapture cap(0); // open the default camera
    if (!cap.isOpened())  // check if we succeeded
        return -1;
    for (;;)
    
        Mat frame;
        cap >> frame; // get a new frame from camera
        //cvtColor(frame, edges, COLOR_BGR2GRAY);
        //GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
        //Canny(edges, edges, 0, 30, 3);
        imshow("Webcam feed", frame);
        if (waitKey(30) >= 0) break;
    
    // the camera will be deinitialized automatically in VideoCapture destructor

    return 0;

但问题是 C 输出显示灰屏,而 C++ 程序提供了肯定的结果。我做错了什么还是有不同的问题。我在 Visual Studio 2013 中使用 Opencv 3.0 alpha 版本。

【问题讨论】:

如果您使用的是 OpenCV 3.0,则不应使用 C API。它已被弃用,要么使用旧版本的 OpenCV(如果你需要 C API),要么只使用 C++ 【参考方案1】:

如果您使用的是 OpenCV 3.0,则不应使用 C API。它已被弃用,要么使用旧版本的 OpenCV(如果你需要 C API),要么只使用 C++。使用 3.0 时无法解决此问题

【讨论】:

以上是关于来自带有 Opencv C 程序的网络摄像头的灰色图像,但 C++ 程序完美运行的主要内容,如果未能解决你的问题,请参考以下文章

在opencv中使用网络摄像头未显示图像

OpenCV - 从 C/C++ 中的默认网络摄像头获取图片 - GTK 问题

在为人脸检测运行 OpenCV 示例时使用带有 Android 模拟器的网络摄像头

使用 OpenCV 3.0.0-rc1 的 VideoCapture 选择超时

OpenCV 找不到我的 USB 网络摄像头

Red5 与 OpenCv - 你怎么看?