libv4l2:打开流时出错:参数无效 VIDIOC_STREAMON:参数无效

libv4l2:打开流时出错:参数无效 VIDIOC_STREAMON:参数无效

我正在使用 opencv 3.0.0 和 C++ 在 Ubuntu 14.04 上开发相机,

当我使用相机运行程序并使用Ctrl+停止它时C,我无法让它再次运行,并且它给了我以下信息:

libv4l2: error turning on stream: Invalid argument
VIDIOC_STREAMON: Invalid argument
Cannot read a frame from video stream

我试过了lsusb,但相机(内置于笔记本电脑中,不是外置的)无法被识别。使用 cheeze 时,它​​还告诉我尝试打开相机时出现错误。

唯一的解决办法是重新启动笔记本电脑。

任何建议都将受到赞赏:) 谢谢

答案1

这发生在你的程序没有释放相机- 例如当您使用它杀死它时Ctrl + C。您可以使用自定义方式退出相机读取循环 - 例如等待Esc

while (1) { // camera loop
    cap.read(frame);
    ...
    (frame processing)
    ...
    if (waitKey(20) == 27) { // wait for 'Esc' key press for 20ms
        break; //  if 'Esc' key is pressed, break loop
    }
}

或者更好的是,你可以捕获Ctrl + C(SIGINT 信号):

bool stop = false;

void sigIntHandler(int signal) {
    stop = true;
}


std::signal(SIGINT, sigIntHandler);

while (!stop) { // camera loop
    cap.read(frame);
    ...
    (frame processing)
    ...
}

看:C++ 参考中的信号处理

答案2

您没有提到您的平台,但在 Raspberry Pi 上,当使用 v4l2 驱动程序运行视频捕获并且 GPU 内存未设置为 128 MB 或更大时,可能会出现此错误。运行sudo raspi-config并使用菜单将其调整为 128。

答案3

这里的问题出在内核

sudo apt-get install linux-generic-lts-utopic

这对我来说很有效

相关内容