2018年4月8日星期日

opencv读取摄像头

读取笔记本自带摄像头


import cv2
import numpy as np

cap=cv2.VideoCapture(0)
#camera.set(3,640) #设置分辨率 
#camera.set(4,480)

while True:
    ret, frame = cap.read()
    
    cv2.imshow('frame',frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    
    
cap.release()
cv2.destroyAllWindows()

如果要读取usb摄像头,序号0改为1即可。


BTW,在darkflow中,命令

python flow --model cfg/yolo-voc-6c.cf-1 --demo camera
是用默认的自带摄像头进行检测,如需改用usb摄像头,则需改写help.py中相关代码
主要是0改为1

def camera(self):
    file = self.FLAGS.demo
    SaveVideo = self.FLAGS.saveVideo
   
    if file == 'camera':
        file = 1####################0
    else:
        assert os.path.isfile(file), \
        'file {} does not exist'.format(file)
       
    camera = cv2.VideoCapture(file)########file
    camera.set(3,640) #设置分辨率 
    camera.set(4,480)
   
    if file == 1:#############0
        self.say('Press [ESC] to quit demo')
       
    assert camera.isOpened(), \
    'Cannot capture source'
   
    if file == 1:#camera window###############0
        #cv2.namedWindow('camera',0)###################0
        _, frame = camera.read()#################none
        cv2.imshow('frame',frame)###############none
        #height, width, _ = frame.shape
        #cv2.resizeWindow('', width, height)
       
#        while True:
#            _,frame = camera.read(0)
#            height, width, _ = frame.shape
#            cv2.imshow('frame',frame)
#            cv2.resizeWindow('', width, height)
#            if cv2.waitKey(1) & 0xFF == ord('q'):
#                break
#        cap.release()
#        cv2.destroyAllWindows()
       
    else:
        _, frame = camera.read()
        height, width, _ = frame.shape

    if SaveVideo:
        fourcc = cv2.VideoWriter_fourcc(*'XVID')
        if file == 1:#camera window#############0
          fps = 1 / self._get_fps(frame)
          if fps < 1:
            fps = 1
        else:
            fps = round(camera.get(cv2.CAP_PROP_FPS))
        videoWriter = cv2.VideoWriter(
            'video.avi', fourcc, fps, (width, height))

    # buffers for demo in batch
    buffer_inp = list()
    buffer_pre = list()
   
    elapsed = int()
    start = timer()
    self.say('Press [ESC] to quit demo')
    # Loop through frames
    while camera.isOpened():
        elapsed += 1
        _, frame = camera.read()
        if frame is None:
            print ('\nEnd of Video')
            break
        preprocessed = self.framework.preprocess(frame)
        buffer_inp.append(frame)
        buffer_pre.append(preprocessed)
       
        # Only process and imshow when queue is full
        if elapsed % self.FLAGS.queue == 0:
            feed_dict = {self.inp: buffer_pre}
            net_out = self.sess.run(self.out, feed_dict)
            for img, single_out in zip(buffer_inp, net_out):
                postprocessed = self.framework.postprocess(
                    single_out, img, False)
                if SaveVideo:
                    videoWriter.write(postprocessed)
                if file == 1: #camera window###############0
                    cv2.imshow('', postprocessed)
            # Clear Buffers
            buffer_inp = list()
            buffer_pre = list()

        if elapsed % 5 == 0:
            sys.stdout.write('\r')
            sys.stdout.write('{0:3.3f} FPS'.format(
                elapsed / (timer() - start)))
            sys.stdout.flush()
        if file == 1: #camera window####################0
            choice = cv2.waitKey(1)
            if choice == 27: break

    sys.stdout.write('\n')
    if SaveVideo:
        videoWriter.release()
    camera.release()
    if file == 1: #camera window#################0
        cv2.destroyAllWindows()












没有评论:

发表评论

Failed to find TIFF library

ImportError: Failed to find TIFF library. Make sure that libtiff is installed and its location is listed in PATH|LD_LIBRARY_PATH|.. 解决方法: ...