【问题标题】:python opencv: cannot capture a windowpython opencv:无法捕获窗口
【发布时间】:2016-12-14 16:37:29
【问题描述】:

对不起,我在磨损的地方粘贴了镜子部分,由于镜子部分的框架是空的,我在运行时将它变成了评论

看起来我的 cap.read() 无法读取任何内容

这真的是一个简单的opencv python 代码,用于捕获一个窗口并让网络摄像头工作。但是当我运行它时,没有显示任何窗口,但也没有显示任何错误。我怎样才能很容易地知道哪里出了问题?

我如何知道网络摄像头是 0 还是其他? 为什么镜像部分不起作用? 有人可以向我推荐一些关于 python 上的 opencv 的好例子吗? 谢谢!!

import cv2

def capture_camera(mirror=True, size=None):
    cap = cv2.VideoCapture(0)

    while True:
        ret, frame = cap.read()
        #if mirror is True:
            #frame = frame[:,::-1]
        if size is not None and len(size) == 200:
            frame = cv2.resize(frame, size)
            cv2.imshow('camera capture', frame)
            k = cv2.waitKey(100)
            if k == 27: 
                break
    cap.release()
    cv2.destroyAllWindows()

capture_camera()

【问题讨论】:

  • 检查retTrue 还是False 以及cap.isOpened 是否返回True。很可能,OpenCV 找不到您的网络摄像头。
  • 谢谢我认为你是对的,看起来 ret 和 frame 都是空的,或者镜像部分不会抛出 TypeError ......我该如何解决它?你能告诉我更多细节吗?

标签: python opencv webcam


【解决方案1】:

你的代码没有在 if 语句下面执行

    if size is not None and len(size) == 200:

因为 size 是 tuple 并且 len(size) 会在你定义后返回 2

     size = (800,600)

第二个错误:您在初始化之前更改了帧数组。 首先,您需要获取 cap.read() 返回的帧数组,然后您可以检查 mirror 是否为 True,如果是,然后通过 frame = frame[:,::-1]

试试这个代码:

import cv2

def capture_camera(mirror=True, size=None):
    cap = cv2.VideoCapture(0)

    while True:
        ret, frame = cap.read()
        if mirror is True:
           frame = frame[:,::-1]

        size = (800,600)
        if size is not None:
            frame = cv2.resize(frame, size)
            cv2.imshow('camera capture', frame)
            k = cv2.waitKey(100)
            if k == 27:
                break
    cap.release()
    cv2.destroyAllWindows()

capture_camera()

【讨论】:

  • 感谢您的回答。粘贴错误代码是我的错……看起来我的 cap.read() 为空,我不知道为什么……
  • stackoverflow.com/q/34716709/4287377 here op通过重新编译ffmpeg库解决了它..
【解决方案2】:

试试这个代码。它对我有用:

import cv2

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    cv2.imshow('Webcam (close with q)' ,frame)

    if(cv2.waitKey(1) & 0xFF == ord('q')):
       break

cap.release()
cv2.destroyAllWindows()

顺便说一句: 您的代码抛出错误:

Traceback (most recent call last):
File "C:/Python/Scripts/OpenCV/Scripts/so_test.py", line 21, in <module>
capture_camera()
File "C:/Python/Scripts/OpenCV/Scripts/so_test.py", line 7, in capture_camera
frame = frame[:,::-1]
UnboundLocalError: local variable 'frame' referenced before assignment

【讨论】:

  • 您的代码与问题中的原始代码完全相同。并且零需要导入 numpy,因为您根本没有在这里使用它。
  • 不是说你的代码不好(它不是),但它没有回答这个问题,因为它没有改进原始代码(他们做同样的事情),或者试图解释为什么它不起作用。
  • 感谢您的回答!对不起,我贴错了……但我会试试你的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 2013-09-09
  • 2011-02-05
  • 1970-01-01
相关资源
最近更新 更多