Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从pyside/opencv访问网络摄像头_Python_Qt_Webcam_Pyside - Fatal编程技术网

Python 从pyside/opencv访问网络摄像头

Python 从pyside/opencv访问网络摄像头,python,qt,webcam,pyside,Python,Qt,Webcam,Pyside,我在pyside/opencv项目中访问网络摄像头时遇到问题 这是一个简单的例子,产生了我面临的问题: from PySide import QtCore, QtGui import cv, cv2, time, ImageQt app = QtGui.QApplication([]) while True: camcapture = cv.CaptureFromCAM(0) cv.SetCaptureProperty(camcapture,cv.CV_CAP_PROP_FR

我在pyside/opencv项目中访问网络摄像头时遇到问题

这是一个简单的例子,产生了我面临的问题:

from PySide import QtCore, QtGui
import cv, cv2, time, ImageQt

app = QtGui.QApplication([])

while True:
    camcapture = cv.CaptureFromCAM(0)
    cv.SetCaptureProperty(camcapture,cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
    cv.SetCaptureProperty(camcapture,cv.CV_CAP_PROP_FRAME_HEIGHT, 720);

    frame = cv.QueryFrame(camcapture)
    image = QtGui.QImage(frame.tostring(), frame.width, frame.height, QtGui.QImage.Format_RGB888).rgbSwapped()
    pixmap = QtGui.QPixmap.fromImage(image)

app.exec_()
我在这里看到两个问题。首先:我很明显地看到使用v4l2访问网络摄像头时出现了一个问题,该摄像头在python中工作正常(使用其他应用程序):

还有一个关机问题还不清楚,但不是我现在的主要问题:

*** glibc detected *** python: double free or corruption (fasttop): 0x00000000029368f0 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x78b66)[0x7f3539f06b66]
/usr/lib64/tls/libnvidia-tls.so.304.64(+0x1cc1)[0x7f352e448cc1]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:02 3937950                            /usr/bin/python2.7
00600000-00601000 r--p 00000000 08:02 3937950                            /usr/bin/python2.7
00601000-00602000 rw-p 00001000 08:02 3937950                            /usr/bin/python2.7
01631000-03cd3000 rw-p 00000000 00:00 0                                  [heap]
7f351b6dc000-7f351b6dd000 rw-p 00000000 00:00 0 
7f351b6dd000-7f351b773000 rw-s 001c2000 00:05 5759                       /dev/video0
7f351b773000-7f351b809000 rw-s 0012c000 00:05 5759                       /dev/video0
[... and so on ... and so on ... ]
我的问题? 我无法从输出中理解。我尝试了代码的许多变体,但通常遇到相同的问题。所以我想这不是一个特定的代码细节,而是我的设置或方法的一些一般性问题。 这就是环境: -x86-64平台(MacBook Pro)上的Linux操作系统(openSUSE-12.2) -opencv 2.4.3 -libqt4.8.4 -python 2.7.3


这里怎么了?我的代码与所有这些示例一样,都有其变体。我错过了什么?

首先,while循环中不应该有
cv.CaptureFromCAM(0)
,因为这是导致“资源繁忙”冲突和内存转储的原因

您可能需要减慢while循环。您可以实现
cv2.waitKey()
或使用
time.sleep()

之后,您将需要完成Qt实现。(这似乎是另一个问题。)

下面是对您的示例的简单重述:

import cv, cv2, time, sys

camcapture = cv.CaptureFromCAM(0)
cv.SetCaptureProperty(camcapture,cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
cv.SetCaptureProperty(camcapture,cv.CV_CAP_PROP_FRAME_HEIGHT, 720)

while True:
    frame = cv.QueryFrame(camcapture)
    ... GUI stuff ...
    time.sleep(.05)
改用cv2:

camcapture = cv2.VideoCapture(0)
while True:
    _, frame = camcapture.read()
    ... GUI stuff ...
    time.sleep(.05)

啊,我昨天不知怎么错过了你的答案,现在我得出了同样的结论,让事情顺利进行。来这里回答我自己的问题。看看你的答案。。。哈哈:谢谢!这是否与相机未正确释放有关?
camcapture = cv2.VideoCapture(0)
while True:
    _, frame = camcapture.read()
    ... GUI stuff ...
    time.sleep(.05)