Ubuntu 14.04でopencv 3.0.0とC++を使用してカメラで作業しています。
カメラを使用してプログラムを実行し、停止するとき Ctrl + C、私はそれをもう一度実行することはできませんし、それは私に次を与えます:
libv4l2: error turning on stream: Invalid argument
VIDIOC_STREAMON: Invalid argument
Cannot read a frame from video stream
lsusb
を試しましたが、カメラ(外部ではなくラップトップに組み込まれています)が認識されません。また、cheezeを使用すると、カメラを開こうとしたときにエラーが発生したことがわかります。
唯一の解決策は、ラップトップを再起動することです。
どんな提案も大歓迎です:)ありがとう
これは、カメラがプログラムによってリリースされていない場合に発生します-たとえば、 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++リファレンスでの信号処理
プラットフォームについては言及しませんが、Raspberry Piでは、v4l2ドライバーを使用してビデオキャプチャを実行するときに、GPUメモリが128 MB以上に設定されていない場合にこのエラーが発生する可能性があります。 Sudo raspi-config
を実行し、メニューを使用して128に調整します。
ここでの問題はカーネルにあります
Sudo apt-get install linux-generic-lts-utopic
これは私のためのトリックを行いました