我使用从opencv网站复制的以下代码:
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
但是图像是黑色的,带有一些白噪声:
我非常确定问题不是来自我的网络摄像头设备,因为我在Windows 10中使用“相机” APP,图片可以很好地显示。
以下是我的python环境:
Python : 3.7.1
OpenCV : 4.1.0.25 (also tried 3.4.5.20)
OS : windows 10
Webcam : Logitech C525
----------------------------更新------------------ --------------
我使用anaconda spyder运行相同的代码,它运行完美!
问题仅在我使用jupyter笔记本时出现,有解决方案吗?
答案 0 :(得分:1)
我的带spyder的网络摄像头遇到了相同的问题。 对我有用的是将python 3.7更改为python 3.6
-> conda安装python = 3.6
答案 1 :(得分:0)
如果您使用的是外部摄像头,则应使用cv2.VideoCapture(1)而不是cv2.VideoCapture(0)。
因为这里0代表内部网络摄像头,1代表外部网络摄像头
import cv2
cap = cv2.VideoCapture(1)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
答案 2 :(得分:0)
尝试一下,您可以使用isOpened()
来确保可以连接到相机。
from threading import Thread
import cv2, time
class VideoStreamWidget(object):
def __init__(self, src=0):
self.capture = cv2.VideoCapture(src)
# Start the thread to read frames from the video stream
self.thread = Thread(target=self.update, args=())
self.thread.daemon = True
self.thread.start()
def update(self):
# Read the next frame from the stream in a different thread
while True:
if self.capture.isOpened():
(self.status, self.frame) = self.capture.read()
time.sleep(.01)
def show_frame(self):
# Display frames in main program
cv2.imshow('frame', self.frame)
key = cv2.waitKey(1)
if key == ord('q'):
self.capture.release()
cv2.destroyAllWindows()
exit(1)
if __name__ == '__main__':
video_stream_widget = VideoStreamWidget()
while True:
try:
video_stream_widget.show_frame()
except AttributeError:
pass