Techt3o's picture
1c0fe995ac3bf6c4bc83a727a73c46ab2d045729fb0abd53c4c78cd2b8282877
20ae9ff verified
raw
history blame
2.28 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]
assert os.path.exists(imagedir), imagedir
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
assert os.path.exists(imagedir), imagedir
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()