Dehazer C++ lib. Fast video dehaze/defog algorithm

€300.00

Dehazer C++ library version 2.0.0 implements video dehazing algorithm based on histogram manipulations. The library utilizes different histogram manipulations to improve the contrast of the video frame and to reduce the effect of haze.

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

Add To Cart
Technical support service
Options:

Purchase options

You can by this software online by card or 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 test algorithm on your video: DOWNLOAD

Overview

Dehazer C++ library implements video dehazing algorithm based on histogram manipulations. The library utilizes different histogram manipulations to improve the contrast of the video frame and to reduce the effect of haze. The library is implemented in C++ (C++17 standard) and exclusively relies on OpenCV library (version 4.5.0 and higher). This library is suitable for various types of camera (daylight, SWIR, MWIR and LWIR) and it provides simple programming interface. Each instance of the Dehazer C++ class object performs frame-by-frame processing of a video data stream, processing each video frame independently. 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) and OpenCV library (version 4.5.0 and higher). Additionally demo application depends on open source SimpleFileDialog (provides dialog to open files, source code included, Apache 2.0 license).

Performance

The library uses only one CPU core for processing. Processing time per fame for different CPU platforms (processing time / frame):

  • Intel(TM) i7-13700H : 4096x2160 - 8.5 msec, 1920x1080 - 2.5 msec, 1280x720 - 0.9 msec, 640x360 - 0.27 msec.
  • Raspberry Pi 5 : 4096x2160 - 23.1 msec, 1920x1080 - 4.9 msec, 1280x720 - 1.9 msec, 640x360 - 0.55 msec.
  • Raspberry Pi 4B : 4096x2160 - 44.1 msec, 1920x1080 - 10.1 msec, 1280x720 - 4.5 msec, 640x360 - 0.9 msec.

VFilter compatible interface

class Dehazer : public VFilter
{
public:

    /// Get string of current library version.
    static std::string getVersion();
    
    //  Initialize video filter. 
    bool initVFilter(VFilterParams& params) override;
    
    /// Set the value for a specific library parameter.
    bool setParam(VFilterParam id, float value) override;

    /// Get the value of a specific library parameter.
    float getParam(VFilterParam id) override;

    /// Get the structure containing all library parameters.
    void getParams(VFilterParams& params) override;

    /// Execute a VFilter action command.
    bool executeCommand(VFilterCommand id) override;
    
    /// Process frame. If mode == 0 (disabled) the method will skip frame.
    bool processFrame(cr::video::Frame& frame) override;
    
    // Set mask.
    bool setMask(cr::video::Frame mask) override;
    
    // Decode and execute command.
    bool decodeAndExecuteCommand(uint8_t* data, int size) override;
};

Simple example

#include <iostream>
#include <opencv2/opencv.hpp>
#include "Dehazer.h"

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

    // Init dehazer.
    cr::video::Dehazer dehazer;

    // Get frame size.
    int width = (int)source.get(cv::CAP_PROP_FRAME_WIDTH);
    int height = (int)source.get(cv::CAP_PROP_FRAME_HEIGHT);

    // Init frames.
    cv::Mat srcOpenCvBgr(height, width, CV_8UC3);
    cv::Mat dstOpenCvBgr(height, width, CV_8UC3);
    cr::video::Frame frame(width, height, cr::video::Fourcc::YUV24);

    // Main loop.
    while (true)
    {
        // Capture next video frame.
        source >> srcOpenCvBgr;
        if (srcOpenCvBgr.empty())
        {
            source.set(cv::CAP_PROP_POS_FRAMES, 1);
            continue;
        }

        // Convert BGR to YUV.
        cv::Mat yuvImg(frame.height, frame.width, CV_8UC3, frame.data);
        cvtColor(srcOpenCvBgr, yuvImg, cv::COLOR_BGR2YUV);

        // Dehaze.
        dehazer.processFrame(frame);

        // Convert YUV to BGR.
        cvtColor(yuvImg, dstOpenCvBgr, cv::COLOR_YUV2BGR);

        // Show results.
        imshow("Result", dstOpenCvBgr);

        // Process keyboard events.
        if (cv::waitKey(1) == 27)
            exit(0);
    }
    return 1;
}
ImageFlip C++ lib. Simple image flip implementation based on OpenCV
€3.00
MotionMagnificator C++ lib. Fast library to emphasize motion on video for better detection
€4,000.00
DigitalZoom C++ lib. Digital zoom implementation based on OpenCV
€10.00