【问题标题】:cvCaptureFromCAM(CV_CAP_ANY) returns NULLcvCaptureFromCAM(CV_CAP_ANY) 返回 NULL
【发布时间】:2014-02-07 18:47:45
【问题描述】:

我有一段c++代码:

#include <opencv/highgui.h>
#include <iostream>

int main()
{
    CvCapture* capture = cvCaptureFromCAM(CV_CAP_ANY); //tried (0) too
    if(capture == NULL)
        std::cout<<"NULL"<<std::endl;

    return 0;
}

并使用以下命令编译它:

g++ main.cpp `pkg-config opencv --cflags` `pkg-config opencv --libs`

./a.out 的结果是

NULL

我使用 OpenCV 2.4.2 和 Ubuntu 12.04

但我确信我的网络摄像头很好,因为以下 python 代码可以正常工作。

import cv2
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cv2.imshow('frame', frame) # it shows a correct image from the webcam
cv2.waitKey(0)

有人知道为什么我无法在 C++ 代码中读取我的网络摄像头吗?

更新:

然后我将 OpenCV 升级到 2.4.8 并再次编译 C++ 代码。 输出仍然为 NULL,但它显示了一些错误消息:

VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
libv4l2: error setting pixformat: Device or resource busy
HIGHGUI ERROR: libv4l unable to ioctl S_FMT
libv4l2: error setting pixformat: Device or resource busy
libv4l1: error setting pixformat: Device or resource busy
HIGHGUI ERROR: libv4l unable to ioctl VIDIOCSPICT

NULL

【问题讨论】:

    标签: python c++ opencv


    【解决方案1】:

    我看到它说“设备/资源正忙”...我认为您正在其他地方使用您的网络摄像头...例如skype 等。否则尝试使用以下代码:

    尝试使用 (1) 而不是 (0)

    VideoCapture cap(1);
    
    for(;;)
    {
        Mat frame;
        cap >> frame;
        imshow("My webcam", frame);
    }
    

    上面的代码是针对C++格式的,如果你想得到一个IplImage,你可以添加下面一行将Mat格式的“帧”转换成IplImage*格式

    IplImage* img = new IplImage(frame);
    cvShowImage("IplImage format webcam", img);
    

    【讨论】:

    • 我不知道。 python 代码有效,我想我没有运行其他使用网络摄像头的程序。
    • 好的...但我也收到了同样的错误,发现我的网络摄像头正忙于另一个应用程序。
    【解决方案2】:

    然后我重新启动系统并解决了。嗯……

    【讨论】:

    • 我认为问题在于您的网络摄像头正忙于我在回答中提到的某个地方。如果您同意,请接受答案:)
    • 是的,也许你是对的。谢谢你。但是我想知道如果设备忙,为什么python代码可以工作?
    【解决方案3】:

    默认情况下,当您将相机连接到您的 linux 系统时,一个名为“motion”的进程将保持它被占用。 你必须杀了它。以下命令将找到并终止“运动”。

    sudo killall -9 动作

    执行此操作后,我想您的代码将起作用。如果您设法解决它,请分享。 谢谢

    【讨论】:

    • 谢谢,但我几年前就研究过它,现在我无法重现它:(无论如何,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多