我正在使用 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)
...
}
答案2
您没有提到您的平台,但在 Raspberry Pi 上,当使用 v4l2 驱动程序运行视频捕获并且 GPU 内存未设置为 128 MB 或更大时,可能会出现此错误。运行sudo raspi-config
并使用菜单将其调整为 128。
答案3
这里的问题出在内核
sudo apt-get install linux-generic-lts-utopic
这对我来说很有效