MotionMagnificator C++ lib. Fast library to emphasize motion on video for better detection

€4,000.00

MotionMagnificator C++ library version 3.2.0 is a versatile library that allows users to enhance and amplify subtle motion and temporal variations in digital video content.

LICENSE: We sell source code of this library as is, without future updates and technical support according to perpetual non-exclusive license. You pay once and can use this library in your software and hardware products without limits. Please read the license agreement before purchasing: LICENSE. You can buy technical support service for this product.

Add To Cart

MotionMagnificator C++ library version 3.2.0 is a versatile library that allows users to enhance and amplify subtle motion and temporal variations in digital video content.

LICENSE: We sell source code of this library as is, without future updates and technical support according to perpetual non-exclusive license. You pay once and can use this library in your software and hardware products without limits. Please read the license agreement before purchasing: LICENSE. You can buy technical support service for this product.

Technical support service
Options:

MotionMagnificator C++ library version 3.2.0 is a versatile library that allows users to enhance and amplify subtle motion and temporal variations in digital video content.

LICENSE: We sell source code of this library as is, without future updates and technical support according to perpetual non-exclusive license. You pay once and can use this library in your software and hardware products without limits. Please read the license agreement before purchasing: LICENSE. You can buy technical support service for this product.

Purchase options

You can buy the software by bank transfer. Bank transfer available only for companies. To buy software by bank transfer please send us request to info@constantrobotics.com. Also, you can buy technical support service for this product.

Downloads

Programmer’s manual: DOWNLOAD

Demo application to check algorithms performance on your video: DOWNLOAD

Overview

MotionMagnificator C++ library amplifies subtle motion and temporal variations in digital video content. It allows camera system operators to detect moving objects that are not visible to the naked eye. Application area: perimeter security and drone detection. The library is implemented in C++ (C++17 standard) and using OpenMP (version >= 2.0, if supported on particular platform) and OpenCL (version >= 2.0, if supported on particular platform). This library is suitable for various types of cameras (daylight, SWIR, MWIR and LWIR). Each instance of the MotionMagnificator C++ class object performs frame-by-frame processing of a video data stream, processing each video frame independently. The library is only intended for not moving (or moving slowly) cameras or for PTZ cameras when observing in a certain sector. It can work on different platforms and automatically detects whether OpenMP or OpenCL are installed and what devices are supported. If those libraries are not available the algorithm will work only on one core on CPU, if they are available user can choose the type of implementation and device or number of threads. The library depends on open source VFilter library (provides interface as well as defines data structures for various video filters implementation, source code included, Apache 2.0 license). Additionally demo application depends on open source SimpleFileDialog (provides dialog to open files, source code included, Apache 2.0 license) and OpenCV library (for capturing and displaying video, linked, Apache 2.0 license).

Demo video

VFilter compatible interface

namespace cr
{
namespace video
{
/// Motion magnificator class.
class MotionMagnificator : public VFilter
{
public:

    /// Class constructor.
    MotionMagnificator();

    /// Class destructor.
    ~MotionMagnificator();

    /// Get string of current library version.
    static std::string getVersion();

    /// Initialize motion magnificator.
    bool initVFilter(VFilterParams& params) override;
    
    /// Set motion magnificator parameter.
    bool setParam(VFilterParam id, float value) override;

    /// Get motion magnificator parameter value.
    float getParam(VFilterParam id) override;

    /// Get all motion magnificator parameters.
    void getParams(VFilterParams& params) override;

    /// Execute action command.
    bool executeCommand(VFilterCommand id) override;

    /// Process frame.
    bool processFrame(cr::video::Frame& frame) override;
    
    /// Set motion magnification mask.
    bool setMask(cr::video::Frame mask) override;

    /// Decode and execute command.
    bool decodeAndExecuteCommand(uint8_t* data, int size) override;

    /// Get list of available GPU devices.
    static std::vector<std::vector<std::string>> getDevices();
};
}
}

Simple example

#include <opencv2/opencv.hpp>
#include "MotionMagnificator.h"

int main(void)
{
    // Open video file "test.mp4".
    cv::VideoCapture videoSource;
    if (!videoSource.open("test.mp4"))
        return -1;

    // Create frames.
    cv::Mat bgrImg;
    int width = (int)videoSource.get(cv::CAP_PROP_FRAME_WIDTH);
    int height = (int)videoSource.get(cv::CAP_PROP_FRAME_HEIGHT);
    cr::video::Frame frameYuv(width, height, cr::video::Fourcc::YUV24);

    // Create motion magnificator and set initial params.
    cr::video::MotionMagnificator magnificator;
    magnificator.setParam(cr::video::VFilterParam::TYPE, 0); // CPU
    magnificator.setParam(cr::video::VFilterParam::MODE, 1);
    magnificator.setParam(cr::video::VFilterParam::LEVEL, 50);

    // Main loop.
    while (true)
    {
        // Capture next video frame. Default BGR pixel format.
        videoSource >> bgrImg;
        if (bgrImg.empty())
        {
            // Set initial video position to replay.
            videoSource.set(cv::CAP_PROP_POS_FRAMES, 0);
            continue;
        }

        // Convert BGR to YUV for motion magnificator.
        cv::Mat yuvImg(height, width, CV_8UC3, frameYuv.data);
        cv::cvtColor(bgrImg, yuvImg, cv::COLOR_BGR2YUV);

        // Magnify movement with default params.
        magnificator.processFrame(frameYuv);

        // Convert result YUV to BGR to display.
        cv::cvtColor(yuvImg, bgrImg, cv::COLOR_YUV2BGR);

        // Show video.
        cv::imshow("VIDEO", bgrImg);
        if (cv::waitKey(1) == 27)
            return 0;
    }
    
    return 1;
}
ImageFlip C++ lib. Simple image flip implementation based on OpenCV
€10.00
DigitalZoom C++ lib. Digital zoom implementation based on OpenCV
€10.00
Dehazer C++ lib. Fast video dehaze/defog algorithm
€600.00