Ejemplo n.º 1
0
 def dense_flow(self, algo, **kwargs):
     if algo == "farnebeck":
         denseFlow = cv.FarnebackOpticalFlow_create(**kwargs)
     elif algo == "dualtvl1":
         denseFlow = cv.optflow.DualTVL1OpticalFlow_create(**kwargs)
     else:
         raise ValueError("pick an algorithm 'dualtvl1' or 'farnebeck'")
     return denseFlow
Ejemplo n.º 2
0
def burst_flows_to_shm(vid_path, alg_type, temp_burst_dir, image_ext,
                       flow_size):
    try:
        cap = cv2.VideoCapture(vid_path)
        if alg_type == 'farn':
            optical_flow_hdl = cv2.FarnebackOpticalFlow_create(
                pyrScale=0.702,
                numLevels=5,
                winSize=10,
                numIters=2,
                polyN=5,
                polySigma=1.1,
                flags=cv2.OPTFLOW_FARNEBACK_GAUSSIAN)
        elif alg_type == 'tvl1':
            optical_flow_hdl = cv2.DualTVL1OpticalFlow_create()
        else:
            raise NotImplementedError(
                'optical flow algorithm {} is not implemented.'.format(
                    alg_type))

        ret, frame1 = cap.read()
        prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
        prvs = resize_by_short_edge(prvs, flow_size)
        hsv = np.zeros_like(frame1)
        hsv[..., 1] = 255
        idx = 1

        while True:
            ret, frame2 = cap.read()
            if not ret:
                break
            next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)
            next = resize_by_short_edge(next, flow_size)

            flow = optical_flow_hdl.calc(prvs, next, None)
            """
			flow_x = cv2.normalize(flow[..., 0], None, 0, 255, cv2.NORM_MINMAX)
			flow_y = cv2.normalize(flow[..., 1], None, 0, 255, cv2.NORM_MINMAX)
			flow_x = flow_x.astype('uint8')
			flow_y = flow_y.astype('uint8')
			video_flow_list.append([flow_x,flow_y])
			"""
            mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])
            hsv[..., 0] = ang * 180 / np.pi / 2
            hsv[..., 2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX)
            bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
            cv2.imwrite(
                os.path.join(temp_burst_dir,
                             '{:04d}{}'.format(idx, image_ext)), bgr)

            prvs = next
            idx += 1
    except Exception as e:
        print(repr(e))
Ejemplo n.º 3
0
class PointTrackerFarneback:
    params__ = dict(pyrScale=0.5,
                    numLevels=3,
                    winSize=15,
                    numIters=3,
                    polyN=5,
                    polySigma=1.2,
                    flags=0,
                    fastPyramids=True)
    __optflow = cv2.FarnebackOpticalFlow_create(**params__)

    def track(self, prevImg, nextImg, prevPts):
        flow = self.__optflow.calc(prevImg, nextImg, None)
        pointsAtPixels = prevPts.round().astype(np.int32)
        x = pointsAtPixels[:, 0]
        y = pointsAtPixels[:, 1]
        ptsFlow = flow[(y, x)]
        pts = np.add(prevPts, ptsFlow)
        status = np.ones(len(pts), np.uint8)
        return pts, status
print(f"Frame height: {frame_height}")

cv2.namedWindow("Frame", cv2.WINDOW_NORMAL)
cv2.namedWindow("Dense optical flow", cv2.WINDOW_NORMAL)

# Parameters for Farnerback optical flow
feature_params = dict(pyrScale=0.5,
                      numLevels=3,
                      winSize=15,
                      numIters=3,
                      polyN=5,
                      polySigma=1.2,
                      flags=0)

# Create Farnerback optical flow
optical_flow = cv2.FarnebackOpticalFlow_create(**feature_params)

# First frame in the sequence
ret, first_frame = cap.read()

# Converts frame to gray
prev_gray = cv2.cvtColor(first_frame, cv2.COLOR_BGR2GRAY)

# Creates an image filled with zeroes for drawing purposes
mask = np.zeros_like(first_frame)

# Sets mask saturation to maximum
mask[..., 1] = 255

while True:
    ret, frame = cap.read()
Ejemplo n.º 5
0
#Importuojamos reikalingos bibliotekos
import numpy as np
import cv2 as cv
import flowlib as fl
import matplotlib.pyplot as plt

#Tyrimo pavyzdžiai
datasets = ("Dimetrodon", "Grove2", "Grove3", "Hydrangea", "RubberWhale",
            "Urban2", "Urban3", "Venus")

#Sukuriami optinio srauto algoritmų objektai
ofDis = cv.DISOpticalFlow.create(cv.DISOPTICAL_FLOW_PRESET_MEDIUM)
ofFb = cv.FarnebackOpticalFlow_create()
ofTvl = cv.optflow.DualTVL1OpticalFlow_create()
ofDf = cv.optflow.createOptFlow_DeepFlow()
ofPca = cv.optflow.createOptFlow_PCAFlow()
ofSf = cv.optflow.createOptFlow_SimpleFlow()
ofSd = cv.optflow.createOptFlow_SparseToDense()


#Funkcija optinio srauto algoritmų tikslumo vertinimui
def evaluate_of(of_alg, name):
    print("\nEvaluating: " + name + " algorithm:")
    sum_mepe = 0
    for dataset in datasets:
        first = cv.imread('./data/' + dataset + "/frame10.png",
                          cv.IMREAD_GRAYSCALE)
        second = cv.imread('./data/' + dataset + "/frame11.png",
                           cv.IMREAD_GRAYSCALE)
        flow_gt = cv.readOpticalFlow('./flow/' + dataset + '/flow10.flo')
        #flow_gt_img = fl.flow_to_image(flow_gt)