• S
    Merge pull request #16494 from StefanBruens:jpeg2000_openjpeg_port · 8d784000
    StefanBruens 提交于
    Jpeg2000 OpenJPEG port
    
    * OpenJPEG based JPEG2000 decoder implementation
    
    Currently, the following input color spaces and depth conversions are
    supported:
    
    - 8 bit -> 8 bit
    - 16 bit -> 16 bit (IMREAD_UNCHANGED, IMREAD_ANYDEPTH)
    
    - RGB(a) -> BGR
    - RGBA -> BGRA (IMREAD_UNCHANGED)
    - Y(a) -> Y(a) (IMREAD_ANYCOLOR, IMREAD_GRAY, IMREAD_UNCHANGED))
    - YCC -> Y (IMREAD_GRAY)
    
    * Check for OpenJPEG availability
    
    This enables OpenJPEG based JPEG2000 imread support by default, which
    can be disabled by -DWITH_OPENJPEG=OFF. In case OpenJPEG is enabled
    and found, any checks for Jasper are skipped.
    
    * Implement precision downscaling for precision > 8 without IMREAD_UNCHANGED
    
    With IMREAD_UNCHANGED, values are kept from the input image, without it
    components are downscaled to CV_8U range.
    
    * Enable Jpeg2K tests when OpenJPEG is available
    
    * Add support for some more color conversions
    
    Support IMREAD_GRAY when input color space is RGB or unspecified.
    Support YUV input color space for BGR output.
    
    * fix: problems with unmanaged memory
    
    * fix: CMake warning - HAVE_OPENJPEG is undefined
    
    Removed trailing whitespaces
    
    * fix: CMake find_package OpenJPEG add minimal version
    
    * Basic JPEG2K encoder
    
    Images with depth CV_8U and CV_16U are supported, with 1 to 4 channels.
    
    * feature: Improved code for OpenJPEG2000 encoder/decoder
    
     - Removed code duplication
     - Added error handlers
     - Extracted functions
    
    * feature: Update conversion openjpeg array from/to Mat
    
    * feature: Extend ChannelsIterator to fulfill RandomAccessIterator named requirements
    
     - Removed channels split in copyFromMatImpl. With ChannelsIterator no allocations are performed.
     - Split whole loop into 2 parts in copyToMat -> where std::copy and std::transforms are called.
    
    * fix: Applied review comments.
    
     - Changed `nullptr` in CV_LOG* functions to `NULL`
     - Added `falls through` comment in decoder color space `switch`
     - Added warning about unsupported parameters for the encoder
    
    * feature: Added decode from in-memory buffers.
    Co-authored-by: NVadim Levin <vadim.levin@xperience.ai>
    8d784000
CMakeLists.txt 64.1 KB