opencv无法阻止流:设备的ioctl不合适

时间:2016-12-17 15:37:00

标签: python opencv video frame

我只是想将视频转换为帧图像。

使用这个简单的代码

import cv2
vidcap = cv2.VideoCapture('gog.mp4')
success,image = vidcap.read()
count = 0
success = True
while success:
  success,image = vidcap.read()
  print 'Read a new frame: ', success
  cv2.imwrite("frame%d.jpg" % count, image)
  count += 1

输出

  

无法停止信息流:设备不适当的ioctl

我在ubuntu服务器上使用python 2.7.6。

5 个答案:

答案 0 :(得分:8)

我在Ubuntu 16.04.3上解决了这个问题。

  1. sudo apt-get install ffmpeg
  2. sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev
  3. 使用以下命令重建OpenCV 3.3.0:

    • cd build
    • cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_FFMPEG=ON -D WITH_TBB=ON -D WITH_GTK=ON -D WITH_V4L=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -DWITH_QT=OFF -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
    • make -j7
    • sudo make install

答案 1 :(得分:2)

嗨我也接受了这个错误并用这个命令解决了。

sudo apt-get install libv4l-dev
cmake -DWITH_LIBV4L=ON .. (this is important)
make && sudo make install

如果cmake命令发生错误第二个请安装cmake gui.Do第一个命令:sudo apt-get install libv4l-dev通过cmakegui程序你可以用CmakeVars.txt文件设置参数。编辑CmakeVars.txt文件交换WITH_LIBV4L = OFF到WITH_LIBV4L = ON并运行make && sudo make install命令。有关此错误的详细信息,请访问:https://github.com/opencv/opencv/issues/6157

答案 2 :(得分:1)

我使用Manjaro 17.0.2和OpenCV 3.2.0与Java有完全相同的问题。我删除了旧的OpenCV实现,从头开始重新安装。使用这些参数cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_LIBV4L=ON ..(感谢@emre)

进行cmake

然后在Cmake安装的输出中,我注意到Can't find ffmpeg - 'pkg-config' utility is missing。安装了pkg-config并重新运行cmake,make,现在一切正常。

答案 3 :(得分:1)

问题是由于缺少ffmpeg和ffmpeg-devel。 您可以在cmake输出中验证这一点。

CMAKE output

如果没有FFMPEG,那些YES将变为NO。如果您编译并安装没有FFMPEG的opencv,您将收到错误“无法停止流:不合适的设备ioctl”视频相关样本。

要解决您的问题,请安装ffmpeg和ffmpeg-devel,然后再次“make”和“make install”。

希望这会有所帮助。

答案 4 :(得分:0)

我使用Linux Mint,并使用C ++进行编程。我使用与https://stackoverflow.com/a/45893821/11247666相同的过程。这是:

sudo apt-get install ffmpeg
sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev
cd opencv-3.3.0
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local  -D WITH_FFMPEG=ON -D WITH_TBB=ON -D WITH_GTK=ON -D WITH_V4L=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -DWITH_QT=OFF -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
make -j7
sudo make install

但是之后。该问题无法解决。我有这个错误:

  

未指定错误(该功能未实现。请使用Windows,GTK + 2.x或Carbon支持重建该库。如果您使用的是Ubuntu或Debian,请安装libgtk2.0-dev和pkg-config,然后重新运行cmake或配置脚本)在cvNamedWindow中。

我应用以下内容

sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config

此后,我应用了相同的过程:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local  -D WITH_FFMPEG=ON -D WITH_TBB=ON -D WITH_GTK=ON -D WITH_V4L=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -DWITH_QT=OFF -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
make -j7
sudo make install

以上对我有用。