Techt3o's picture
b9e876b2bcec19ad9413c7406a81140932a9ab818b77fb491c8f4ac74828cb4f
2f5ca7a verified
raw
history blame
2.19 kB
import os
import cv2
import numpy as np
from multiprocessing import Process, Queue
from pathlib import Path
from itertools import chain
def image_stream(queue, imagedir, calib, stride, skip=0):
""" image generator """
calib = np.loadtxt(calib, delimiter=" ")
fx, fy, cx, cy = calib[:4]
K = np.eye(3)
K[0,0] = fx
K[0,2] = cx
K[1,1] = fy
K[1,2] = cy
img_exts = ["*.png", "*.jpeg", "*.jpg"]
image_list = sorted(chain.from_iterable(Path(imagedir).glob(e) for e in img_exts))[skip::stride]
for t, imfile in enumerate(image_list):
image = cv2.imread(str(imfile))
if len(calib) > 4:
image = cv2.undistort(image, K, calib[4:])
if 0:
image = cv2.resize(image, None, fx=0.5, fy=0.5)
intrinsics = np.array([fx / 2, fy / 2, cx / 2, cy / 2])
else:
intrinsics = np.array([fx, fy, cx, cy])
h, w, _ = image.shape
image = image[:h-h%16, :w-w%16]
queue.put((t, image, intrinsics))
queue.put((-1, image, intrinsics))
def video_stream(queue, imagedir, calib, stride, skip=0):
""" video generator """
calib = np.loadtxt(calib, delimiter=" ")
fx, fy, cx, cy = calib[:4]
K = np.eye(3)
K[0,0] = fx
K[0,2] = cx
K[1,1] = fy
K[1,2] = cy
cap = cv2.VideoCapture(imagedir)
t = 0
for _ in range(skip):
ret, image = cap.read()
while True:
# Capture frame-by-frame
for _ in range(stride):
ret, image = cap.read()
# if frame is read correctly ret is True
if not ret:
break
if not ret:
break
if len(calib) > 4:
image = cv2.undistort(image, K, calib[4:])
image = cv2.resize(image, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
h, w, _ = image.shape
image = image[:h-h%16, :w-w%16]
intrinsics = np.array([fx*.5, fy*.5, cx*.5, cy*.5])
queue.put((t, image, intrinsics))
t += 1
queue.put((-1, image, intrinsics))
cap.release()