当前位置: 首页 > 知识库问答 >
问题:

OpenCV 3.1。0 Linux中的imshow不适用于网络摄像头(Python)

麹高远
2023-03-14

我试图使用官方openCV教程中的代码,在Ubuntu/Python 3.6中使用cv2.imshow()显示网络摄像头的视频:

import numpy as np
import cv2
cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

对于cv2,我得到以下错误。imshow()

功能未实现。使用Windows、GTK 2. x或Carbon支持重建库。如果你在Ubuntu或Debian上,安装libgtk2.0-dev和pkg-config,然后在cvShowImage函数中重新运行cmake或配置脚本

在搜索错误时,我偶然发现了这篇文章,作为类似问题的替代答案:

如果您在任何时候使用OpenCV python pip包安装OpenCV,请注意以下注意事项,摘自https://pypi.python.org/pypi/opencv-python

重要提示:MacOS和Linux控制盘目前存在一些限制:

  • 不支持视频相关功能(未使用FFmpeg编译)
  • 例如cv2。imshow()将无法工作(未使用GTK 2.x或Carbon支持编译)

还要注意,要从其他源安装,首先必须删除opencv python包

OpenCV错误:未实现该函数

OpenCV不能正常工作与蟒蛇Linux与蟒蛇。获取cv2.imshow()未实现的错误

大多数其他openCV函数正常工作。

是否有cv2的替代方案。imshow()使用标准anaconda库,这样我就不必重新编译openCV或使用Python 2.7?

共有1个答案

令狐良骏
2023-03-14

我用matplotlib拼凑了一个又快又脏的代码片段。动画,与cv2相似。imshow()预计与网络摄像头视频相关:

import cv2
import matplotlib.pyplot as plt
import matplotlib.animation as animation
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
# The following is the replacement for cv2.imshow():
fig = plt.figure() 
ax = fig.add_subplot(111)
im = ax.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB), animated=True)
def updatefig(*args):
    ret, frame = cap.read()
    im.set_array(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
    return im
ani = animation.FuncAnimation(fig, updatefig, interval=10)
plt.show()

我发现这非常有用,因为由于matplotlib,我能够在网络摄像头视频上输出许多重叠的绘图。动画FuncAnimation可以为附加到ax对象的任意多个绘图设置动画,只要它们在上面的updatefig()函数中更新即可。

编辑:当我在Jupyter笔记本中工作时,我添加了以下内容,以便在新窗口中查看视频:

import matplotlib
matplotlib.use('qt5agg')
 类似资料:
  • 我正在开发一个web应用程序,它可以浏览和拍摄本地照片,我还想通过相机拍摄图像。我使用下面的代码,我可以捕捉设备摄像头。 现在,我想获得图像和onchangeevent,转换为base64,并希望在该页面中显示。 好心帮我伙计们!

  • 问题内容: 我一直在尝试使用Python创建一个简单的程序,该程序使用OpenCV从我的网络摄像头获取视频供稿并将其显示在屏幕上。 我知道我之所以在这里,是因为创建了窗口,并且网络摄像头上的灯闪烁了,但是它似乎在窗口中什么都没有显示。希望有人可以解释我在做什么错。 在不相关的注释上,我注意到我的网络摄像头有时会在中更改其索引号,有时我需要输入0、1或2,即使我只连接了一个摄像头,也没有拔下插头(我

  • 问题内容: 如何连续从摄像头捕获图像? 我想尝试对象识别(也许使用Java Media Framework)。 我当时正在考虑创建两个线程 一个线程: 节点1:捕获实时图像 节点2:将图片另存为“ 1.jpg” 节点3:等待5秒 节点4:重复… 其他线程: 节点1:等到捕获图像 节点2:使用“ 1.jpg”获取每个像素的颜色 节点3:将数据保存在数组中 节点4:重复… 问题答案: 此JavaCV实

  • 问题内容: 以前,我已经将可运行的网络摄像头代码放入我的应用程序中,但是现在当我更新到AngularJS v1.5.0时,它无法正常工作。我正在使用与v1.3.0完美配合的网络摄像头指令。 这是我的代码: 但是现在,AngularJS v1.5.0给出了以下错误: 我还尝试对AngularJS ng-Camera使用其他解决方案,但即使是演示页也不适用于我。 注意: 我知道问题在于我们无法从Ang

  • 问题内容: 我想从Python访问我的网络摄像头。 我尝试使用VideoCapture扩展(教程),但对我而言效果不佳,我不得不解决一些问题,例如分辨率> 320x230时它有点慢,有时它返回时没有明显原因。 是否有更好的方法从Python访问我的网络摄像头? 问题答案: OpenCV支持从网络摄像头获取数据,并且默认情况下随附Python包装器,您还需要安装OpenCV Python扩展名(称为

  • 我正在做一个项目,试图探测特定表面(竞技场)上的绿色和红色圆圈。当我尝试使用数字版本的竞技场(PNG图像)时,我可以成功地检测到两个彩色圆圈。 现在,我将这个竞技场打印在一个flex上(没有这两个彩色圆圈),并手动在上面放置彩色圆形硬币。但在通过1.3 MP的网络摄像头捕捉到它的图像后,颜色检测无法工作,并给出了错误的结果。 以下是通过网络摄像头拍摄的打印竞技场: 为什么没有检测到颜色?我需要对网