Files
opencv/piCameraPipeline/VideoSource.py
T
jens 176b58d9cc - improved lasertrack
- VideoSource supports image resizing if file resolution doesn't match requested resolution


git-svn-id: http://moon:8086/svn/software/trunk/projects/opencv@333 b431acfa-c32f-4a4a-93f1-934dc6c82436
2016-10-22 12:57:48 +00:00

62 lines
1.6 KiB
Python
Executable File

import time
import cv2
import imutils
from threading import Thread
from picamera import PiCamera
from piCameraPipeline.PiCameraPipeline import RgbProcessorAdapter
class VideoSource(RgbProcessorAdapter):
def __init__(self, fileName, resolution, framerate):
super(VideoSource, self).__init__(resolution)
self.fileName = fileName
self.resolution = resolution
self.framerate = framerate
self.thread = None
self.camera = None
self.cancel = False
if fileName == 'piCamera':
self.camera = PiCamera()
self.camera.resolution = (self.resolution[0], self.resolution[1])
self.camera.framerate = self.framerate
else:
self.needRgbConversion = False
self.thread = Thread(target=self.fileReadThread)
def fileReadThread(self):
pass
def start(self):
if self.thread is not None:
if not self.thread.is_alive():
self.thread.start()
else:
self.camera.start_recording(self, format="bgr")
def stop(self):
if self.thread is not None:
if self.thread.is_alive():
self.cancel = True
self.thread.join()
else:
self.camera.stop_recording()
def fileReadThread(self):
cap = cv2.VideoCapture(self.fileName)
cap_w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
cap_h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
needResize = False
if self.resolution[0] != cap_w or self.resolution[1] != cap_h:
needResize = True
while not self.cancel:
ret, frame = cap.read()
if ret:
if needResize:
self.write(imutils.resize(frame, width=self.resolution[0], height=self.resolution[1]))
else:
self.write(frame)
else:
break
time.sleep(1.0/self.framerate)
self.flush()