#ifndef CAFFE2_VIDEO_OPTICAL_FLOW_H_ #define CAFFE2_VIDEO_OPTICAL_FLOW_H_ #include #include #include #include #include namespace caffe2 { // Four different types of optical flow algorithms supported; // BroxOpticalFlow doesn't have a CPU version; // DensePyrLKOpticalFlow only has sparse CPU version; enum FLowAlgType { FarnebackOpticalFlow = 0, DensePyrLKOpticalFlow = 1, BroxOpticalFlow = 2, OpticalFlowDual_TVL1 = 3, }; // Define different types of optical flow data type // 0: original two channel optical flow // 1: three channel optical flow with magnitude as the third channel // 2: two channel optical flow + one channel gray // 3: two channel optical flow + three channel rgb enum FlowDataType { Flow2C = 0, Flow3C = 1, FlowWithGray = 2, FlowWithRGB = 3, }; void OpticalFlowExtractor( const cv::Mat& prev_gray, const cv::Mat& curr_gray, const int optical_flow_alg_type, cv::Mat& flow); void MergeOpticalFlow(cv::Mat& prev_flow, const cv::Mat& curr_flow); void MultiFrameOpticalFlowExtractor( const std::vector& grays, const int optical_flow_alg_type, cv::Mat& flow); } // namespace caffe2 #endif // CAFFE2_VIDEO_OPTICAL_FLOW_H_