opencv 无法停止流:设备的 ioctl 不合适
Posted
技术标签:
【中文标题】opencv 无法停止流:设备的 ioctl 不合适【英文标题】:opencv Unable to stop the stream: Inappropriate ioctl for device 【发布时间】:2017-05-03 04:23:53 【问题描述】:我只想将视频转换为帧图像。
使用这个简单的代码
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。
【问题讨论】:
有这方面的消息吗? 还没有。我认为这可能是 ffmpeg 问题 类似问题:***.com/q/42562876/5989200 【参考方案1】:您好,我也遇到了这个错误并用这个命令解决了。
sudo apt-get install libv4l-dev
cmake -DWITH_LIBV4L=ON .. (this is important)
make && sudo make install
如果第二个 cmake 命令出错,请安装 cmake gui。执行第一个命令: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
【讨论】:
cmake 应该从哪个目录运行? @emre,您在github.com/opencv/opencv/issues/6157 中提到的错误是关于“VIDIOC_QUERYCTRL:设备的 ioctl 不合适”。它不同于“无法停止流:设备的 ioctl 不合适”。你确定它们是相关的吗?【参考方案2】:我在使用 Java 的 Manjaro 17.0.2 和 OpenCV 3.2.0 时遇到了完全相同的问题。我删除了 OpenCV 的旧实现,然后从头开始重新安装它。使用这些参数运行 cmake cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_LIBV4L=ON ..
(感谢 @emre)
然后在 Cmake 安装的输出中我注意到Can't find ffmpeg - 'pkg-config' utility is missing
。安装 pkg-config 并重新运行 cmake、make,现在一切正常。
【讨论】:
【参考方案3】:问题是由于缺少 ffmpeg 和 ffmpeg-devel。 您可以在 cmake 输出中验证这一点。
如果 FFMPEG 不可用,那些 YES 将变为 NO。如果您在没有 FFMPEG 的情况下编译和安装 opencv,对于视频相关示例,您将收到错误“无法停止流:设备的 ioctl 不合适”。
要解决您的问题,请安装 ffmpeg 和 ffmpeg-devel,然后再次“make”和“make install”。
希望这会有所帮助。
【讨论】:
【参考方案4】:我已经在 Ubuntu 16.04.3 上解决了这个问题。
sudo apt-get install ffmpeg
sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev
使用以下命令重建 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
【讨论】:
我在 c++ 中也遇到了同样的错误。我尝试了所有可能的解决方案,但没有奏效。你能帮忙吗【参考方案5】:我使用 Linux Mint,并使用 C++ 编程。我应用了与https://***.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
以上对我有用。
【讨论】:
以上是关于opencv 无法停止流:设备的 ioctl 不合适的主要内容,如果未能解决你的问题,请参考以下文章
ioctl“无法发送 spi 消息:无效参数”Beaglebone Black