mirror of
https://github.com/opencv/opencv_contrib.git
synced 2025-10-19 11:21:39 +08:00
NVIDIA_OPTICAL_FLOW_2_0_INTEGRATION
This commit is contained in:

committed by
Vishal Bhaskar Chiluka

parent
0b6b8ff9dd
commit
582fe44b7a
@@ -392,9 +392,9 @@ public:
|
||||
/** @brief Class for computing the optical flow vectors between two images using NVIDIA Optical Flow hardware and Optical Flow SDK 1.0.
|
||||
@note
|
||||
- A sample application demonstrating the use of NVIDIA Optical Flow can be found at
|
||||
opencv_source_code/samples/gpu/nvidia_optical_flow.cpp
|
||||
opencv_contrib_source_code/modules/cudaoptflow/samples/nvidia_optical_flow.cpp
|
||||
- An example application comparing accuracy and performance of NVIDIA Optical Flow with other optical flow algorithms in OpenCV can be found at
|
||||
opencv_source_code/samples/gpu/optical_flow.cpp
|
||||
opencv_contrib_source_code/modules/cudaoptflow/samples/optical_flow.cpp
|
||||
*/
|
||||
|
||||
class CV_EXPORTS_W NvidiaOpticalFlow_1_0 : public NvidiaHWOpticalFlow
|
||||
@@ -417,18 +417,16 @@ public:
|
||||
* using nearest neighbour upsampling method.
|
||||
|
||||
@param flow Buffer of type CV_16FC2 containing flow vectors generated by calc().
|
||||
@param width Width of the input image in pixels for which these flow vectors were generated.
|
||||
@param height Height of the input image in pixels for which these flow vectors were generated.
|
||||
@param imageSize Size of the input image in pixels for which these flow vectors were generated.
|
||||
@param gridSize Granularity of the optical flow vectors returned by calc() function. Can be queried using getGridSize().
|
||||
@param upsampledFlow Buffer of type CV_32FC2, containing upsampled flow vectors, each flow vector for 1 pixel, in the pitch-linear layout.
|
||||
*/
|
||||
CV_WRAP virtual void upSampler(InputArray flow, int width, int height,
|
||||
CV_WRAP virtual void upSampler(InputArray flow, cv::Size imageSize,
|
||||
int gridSize, InputOutputArray upsampledFlow) = 0;
|
||||
|
||||
/** @brief Instantiate NVIDIA Optical Flow
|
||||
|
||||
@param width Width of input image in pixels.
|
||||
@param height Height of input image in pixels.
|
||||
@param imageSize Size of input image in pixels.
|
||||
@param perfPreset Optional parameter. Refer [NV OF SDK documentation](https://developer.nvidia.com/opticalflow-sdk) for details about presets.
|
||||
Defaults to NV_OF_PERF_LEVEL_SLOW.
|
||||
@param enableTemporalHints Optional parameter. Flag to enable temporal hints. When set to true, the hardware uses the flow vectors
|
||||
@@ -445,10 +443,142 @@ public:
|
||||
If output stream is not set, the execute function will use default stream which is NULL stream;
|
||||
*/
|
||||
CV_WRAP static Ptr<NvidiaOpticalFlow_1_0> create(
|
||||
int width,
|
||||
int height,
|
||||
cv::Size imageSize,
|
||||
cv::cuda::NvidiaOpticalFlow_1_0::NVIDIA_OF_PERF_LEVEL perfPreset
|
||||
= cv::cuda::NvidiaOpticalFlow_1_0::NVIDIA_OF_PERF_LEVEL::NV_OF_PERF_LEVEL_SLOW,
|
||||
= cv::cuda::NvidiaOpticalFlow_1_0::NV_OF_PERF_LEVEL_SLOW,
|
||||
bool enableTemporalHints = false,
|
||||
bool enableExternalHints = false,
|
||||
bool enableCostBuffer = false,
|
||||
int gpuId = 0,
|
||||
Stream& inputStream = Stream::Null(),
|
||||
Stream& outputStream = Stream::Null());
|
||||
};
|
||||
|
||||
/** @brief Class for computing the optical flow vectors between two images using NVIDIA Optical Flow hardware and Optical Flow SDK 2.0.
|
||||
@note
|
||||
- A sample application demonstrating the use of NVIDIA Optical Flow can be found at
|
||||
opencv_contrib_source_code/modules/cudaoptflow/samples/nvidia_optical_flow.cpp
|
||||
- An example application comparing accuracy and performance of NVIDIA Optical Flow with other optical flow algorithms in OpenCV can be found at
|
||||
opencv_contrib_source_code/modules/cudaoptflow/samples/optical_flow.cpp
|
||||
*/
|
||||
|
||||
class CV_EXPORTS_W NvidiaOpticalFlow_2_0 : public NvidiaHWOpticalFlow
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Supported optical flow performance levels.
|
||||
*/
|
||||
enum NVIDIA_OF_PERF_LEVEL
|
||||
{
|
||||
NV_OF_PERF_LEVEL_UNDEFINED,
|
||||
NV_OF_PERF_LEVEL_SLOW = 5, /**< Slow perf level results in lowest performance and best quality */
|
||||
NV_OF_PERF_LEVEL_MEDIUM = 10, /**< Medium perf level results in low performance and medium quality */
|
||||
NV_OF_PERF_LEVEL_FAST = 20, /**< Fast perf level results in high performance and low quality */
|
||||
NV_OF_PERF_LEVEL_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
* Supported grid size for output buffer.
|
||||
*/
|
||||
enum NVIDIA_OF_OUTPUT_VECTOR_GRID_SIZE
|
||||
{
|
||||
NV_OF_OUTPUT_VECTOR_GRID_SIZE_UNDEFINED,
|
||||
NV_OF_OUTPUT_VECTOR_GRID_SIZE_1 = 1, /**< Output buffer grid size is 1x1 */
|
||||
NV_OF_OUTPUT_VECTOR_GRID_SIZE_2 = 2, /**< Output buffer grid size is 2x2 */
|
||||
NV_OF_OUTPUT_VECTOR_GRID_SIZE_4 = 4, /**< Output buffer grid size is 4x4 */
|
||||
NV_OF_OUTPUT_VECTOR_GRID_SIZE_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
* Supported grid size for hint buffer.
|
||||
*/
|
||||
enum NVIDIA_OF_HINT_VECTOR_GRID_SIZE
|
||||
{
|
||||
NV_OF_HINT_VECTOR_GRID_SIZE_UNDEFINED,
|
||||
NV_OF_HINT_VECTOR_GRID_SIZE_1 = 1, /**< Hint buffer grid size is 1x1.*/
|
||||
NV_OF_HINT_VECTOR_GRID_SIZE_2 = 2, /**< Hint buffer grid size is 2x2.*/
|
||||
NV_OF_HINT_VECTOR_GRID_SIZE_4 = 4, /**< Hint buffer grid size is 4x4.*/
|
||||
NV_OF_HINT_VECTOR_GRID_SIZE_8 = 8, /**< Hint buffer grid size is 8x8.*/
|
||||
NV_OF_HINT_VECTOR_GRID_SIZE_MAX
|
||||
};
|
||||
|
||||
/** @brief convertToFloat() helper function converts the hardware-generated flow vectors to floating point representation (1 flow vector for gridSize).
|
||||
* gridSize can be queried via function getGridSize().
|
||||
|
||||
@param flow Buffer of type CV_16FC2 containing flow vectors generated by calc().
|
||||
@param floatFlow Buffer of type CV_32FC2, containing flow vectors in floating point representation, each flow vector for 1 pixel per gridSize, in the pitch-linear layout.
|
||||
*/
|
||||
CV_WRAP virtual void convertToFloat(InputArray flow, InputOutputArray floatFlow) = 0;
|
||||
|
||||
/** @brief Instantiate NVIDIA Optical Flow
|
||||
|
||||
@param imageSize Size of input image in pixels.
|
||||
@param perfPreset Optional parameter. Refer [NV OF SDK documentation](https://developer.nvidia.com/opticalflow-sdk) for details about presets.
|
||||
Defaults to NV_OF_PERF_LEVEL_SLOW.
|
||||
@param outputGridSize Optional parameter. Refer [NV OF SDK documentation](https://developer.nvidia.com/opticalflow-sdk) for details about output grid sizes.
|
||||
Defaults to NV_OF_OUTPUT_VECTOR_GRID_SIZE_1.
|
||||
@param hintGridSize Optional parameter. Refer [NV OF SDK documentation](https://developer.nvidia.com/opticalflow-sdk) for details about hint grid sizes.
|
||||
Defaults to NV_OF_HINT_VECTOR_GRID_SIZE_1.
|
||||
@param enableTemporalHints Optional parameter. Flag to enable temporal hints. When set to true, the hardware uses the flow vectors
|
||||
generated in previous call to calc() as internal hints for the current call to calc().
|
||||
Useful when computing flow vectors between successive video frames. Defaults to false.
|
||||
@param enableExternalHints Optional Parameter. Flag to enable passing external hints buffer to calc(). Defaults to false.
|
||||
@param enableCostBuffer Optional Parameter. Flag to enable cost buffer output from calc(). Defaults to false.
|
||||
@param gpuId Optional parameter to select the GPU ID on which the optical flow should be computed. Useful in multi-GPU systems. Defaults to 0.
|
||||
@param inputStream Optical flow algorithm may optionally involve cuda preprocessing on the input buffers.
|
||||
The input cuda stream can be used to pipeline and synchronize the cuda preprocessing tasks with OF HW engine.
|
||||
If input stream is not set, the execute function will use default stream which is NULL stream;
|
||||
@param outputStream Optical flow algorithm may optionally involve cuda post processing on the output flow vectors.
|
||||
The output cuda stream can be used to pipeline and synchronize the cuda post processing tasks with OF HW engine.
|
||||
If output stream is not set, the execute function will use default stream which is NULL stream;
|
||||
*/
|
||||
CV_WRAP static Ptr<NvidiaOpticalFlow_2_0> create(
|
||||
cv::Size imageSize,
|
||||
cv::cuda::NvidiaOpticalFlow_2_0::NVIDIA_OF_PERF_LEVEL perfPreset
|
||||
= cv::cuda::NvidiaOpticalFlow_2_0::NV_OF_PERF_LEVEL_SLOW,
|
||||
cv::cuda::NvidiaOpticalFlow_2_0::NVIDIA_OF_OUTPUT_VECTOR_GRID_SIZE outputGridSize
|
||||
= cv::cuda::NvidiaOpticalFlow_2_0::NV_OF_OUTPUT_VECTOR_GRID_SIZE_1,
|
||||
cv::cuda::NvidiaOpticalFlow_2_0::NVIDIA_OF_HINT_VECTOR_GRID_SIZE hintGridSize
|
||||
= cv::cuda::NvidiaOpticalFlow_2_0::NV_OF_HINT_VECTOR_GRID_SIZE_1,
|
||||
bool enableTemporalHints = false,
|
||||
bool enableExternalHints = false,
|
||||
bool enableCostBuffer = false,
|
||||
int gpuId = 0,
|
||||
Stream& inputStream = Stream::Null(),
|
||||
Stream& outputStream = Stream::Null());
|
||||
|
||||
/** @brief Instantiate NVIDIA Optical Flow with ROI Feature
|
||||
|
||||
@param imageSize Size of input image in pixels.
|
||||
@param roiData Pointer to ROI data.
|
||||
@param perfPreset Optional parameter. Refer [NV OF SDK documentation](https://developer.nvidia.com/opticalflow-sdk) for details about presets.
|
||||
Defaults to NV_OF_PERF_LEVEL_SLOW.
|
||||
@param outputGridSize Optional parameter. Refer [NV OF SDK documentation](https://developer.nvidia.com/opticalflow-sdk) for details about output grid sizes.
|
||||
Defaults to NV_OF_OUTPUT_VECTOR_GRID_SIZE_1.
|
||||
@param hintGridSize Optional parameter. Refer [NV OF SDK documentation](https://developer.nvidia.com/opticalflow-sdk) for details about hint grid sizes.
|
||||
Defaults to NV_OF_HINT_VECTOR_GRID_SIZE_1.
|
||||
@param enableTemporalHints Optional parameter. Flag to enable temporal hints. When set to true, the hardware uses the flow vectors
|
||||
generated in previous call to calc() as internal hints for the current call to calc().
|
||||
Useful when computing flow vectors between successive video frames. Defaults to false.
|
||||
@param enableExternalHints Optional Parameter. Flag to enable passing external hints buffer to calc(). Defaults to false.
|
||||
@param enableCostBuffer Optional Parameter. Flag to enable cost buffer output from calc(). Defaults to false.
|
||||
@param gpuId Optional parameter to select the GPU ID on which the optical flow should be computed. Useful in multi-GPU systems. Defaults to 0.
|
||||
@param inputStream Optical flow algorithm may optionally involve cuda preprocessing on the input buffers.
|
||||
The input cuda stream can be used to pipeline and synchronize the cuda preprocessing tasks with OF HW engine.
|
||||
If input stream is not set, the execute function will use default stream which is NULL stream;
|
||||
@param outputStream Optical flow algorithm may optionally involve cuda post processing on the output flow vectors.
|
||||
The output cuda stream can be used to pipeline and synchronize the cuda post processing tasks with OF HW engine.
|
||||
If output stream is not set, the execute function will use default stream which is NULL stream;
|
||||
*/
|
||||
CV_WRAP static Ptr<NvidiaOpticalFlow_2_0> create(
|
||||
cv::Size imageSize,
|
||||
std::vector<Rect> roiData,
|
||||
cv::cuda::NvidiaOpticalFlow_2_0::NVIDIA_OF_PERF_LEVEL perfPreset
|
||||
= cv::cuda::NvidiaOpticalFlow_2_0::NV_OF_PERF_LEVEL_SLOW,
|
||||
cv::cuda::NvidiaOpticalFlow_2_0::NVIDIA_OF_OUTPUT_VECTOR_GRID_SIZE outputGridSize
|
||||
= cv::cuda::NvidiaOpticalFlow_2_0::NV_OF_OUTPUT_VECTOR_GRID_SIZE_1,
|
||||
cv::cuda::NvidiaOpticalFlow_2_0::NVIDIA_OF_HINT_VECTOR_GRID_SIZE hintGridSize
|
||||
= cv::cuda::NvidiaOpticalFlow_2_0::NV_OF_HINT_VECTOR_GRID_SIZE_1,
|
||||
bool enableTemporalHints = false,
|
||||
bool enableExternalHints = false,
|
||||
bool enableCostBuffer = false,
|
||||
|
Reference in New Issue
Block a user