ppl.cv is a high-performance image processing library of openPPL supporting x86 and cuda platforms.

Overview

ppl.cv

ppl.cv is a high-performance image processing library of openPPL supporting x86 and cuda platforms.

Source Tree Structure

┌────────────────────────────────────────────────────┐
│ directory or file              explanation         │
└────────────────────────────────────────────────────┘
 ppl.cv
  ├── .vscode                    Visual code settings
  ├── assets                     Asset files, such as pictures for testing
  ├── cmake                      CMake script
  │     ├─ x86.cmake             CMake configuration script for x86 architecture.
  │     ├─ cuda.cmake            CMake configuration script for cuda architecture.
  │     ├─ opencv.cmake          CMake configuration script for OpenCV.
  │     ├─ benchmark.cmake       CMake configuration script for benchmarks.
  │     ├─ unittest.cmake        CMake configuration script for unit tests .
  │     └─ deps.cmake            CMake configuration script for third-party dependencies.
  ├── src                        Source code directory
  │    └─ ppl
  │        └─ cv                 Common headers and source files are placed here
  │           ├─ cuda            All cuda source files are placed here
  │           ├─ x86             All x86 source files are placed here
  ├── .gitignore
  ├── CMakeLists.txt
  ├── README.md
  └── build.sh                   Shell scripts for building ppl.cv projects.

How To Build

This project is configured by cmake script. A simple build script is provided.

$ cd ${path_to_ppl.cv}
$ ./build.sh x64                            # for linux-x86_64
$ ./build.sh cuda                           # for linux-x86_64_cuda

Contact Us

Contributions

This project uses Contributor Covenant as code of conduct. Any contributions would be highly appreciated.

Acknowledgements

License

This project is distributed under the Apache License, Version 2.0.

Issues
  • Windows cuda build

    Windows cuda build

    What are the problems?(snapshots or detailed error messages)

    ./build.bat -G "Visual Studio 16 2019" -A x64 -DHPCC_USE_X86_64=ON -DHPCC_USE_CUDA=ON -DPPLCV_BUILD_TESTS=OFF -DPPLCV_BUILD_BENCHMARK=OFF windows visual studio2019 编译 只生成了pplcommon_static.lib

    Which version(commit id or tag) of ppl.cv is used?

    main branch

    What's the operating system ppl.cv runs on?

    windows

    What's the compiler and its version?

    vs2019 amd 64

    What are the commands used to build ppl.cv?

    ./build.bat -G "Visual Studio 16 2019" -A x64 -DHPCC_USE_X86_64=ON -DHPCC_USE_CUDA=ON -DPPLCV_BUILD_TESTS=OFF -DPPLCV_BUILD_BENCHMARK=OFF

    What are the execution commands?

    minimal code snippets for reproducing these problems(if necessary)

    error

    image image

    opened by ctxqlxs 9
  • arm64 build failed with ndk r21b

    arm64 build failed with ndk r21b

    Error message

    图片

    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:65:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(tcurr, tnext[0], nc);
                              ^                          ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:327:13: note: in instantiation of function template specialization 'ppl::cv::aarch64::MorphRow<ppl::cv::aarch64::DilateVecOp, float, 4, 3>' requested here
                MorphRow<morphOp, float, nc, kernel_len>(tprev, tcurr, tnext, srow + x, srcStride, drow, y, height - 1 - y, x - v_elem, width * nc - 1 - (x - v_elem), borderValue);
                ^
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:150:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(tnext[0], t_last, nc);
                              ^                           ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:330:9: note: in instantiation of function template specialization 'ppl::cv::aarch64::MorphRowLast<ppl::cv::aarch64::DilateVecOp, float, 4, 3>' requested here
            MorphRowLast<morphOp, float, nc, kernel_len>(tprev, tcurr, tnext, srow + x, srcStride, drow, y, height - 1 - y, x - v_elem, width * nc - 1 - (x - v_elem), borderValue);
            ^
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:162:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(t_last, v_border, nc);
                              ^                           ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:65:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(tcurr, tnext[0], nc);
                              ^                          ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:327:13: note: in instantiation of function template specialization 'ppl::cv::aarch64::MorphRow<ppl::cv::aarch64::DilateVecOp, float, 4, 5>' requested here
                MorphRow<morphOp, float, nc, kernel_len>(tprev, tcurr, tnext, srow + x, srcStride, drow, y, height - 1 - y, x - v_elem, width * nc - 1 - (x - v_elem), borderValue);
                ^
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:150:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(tnext[0], t_last, nc);
                              ^                           ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:330:9: note: in instantiation of function template specialization 'ppl::cv::aarch64::MorphRowLast<ppl::cv::aarch64::DilateVecOp, float, 4, 5>' requested here
            MorphRowLast<morphOp, float, nc, kernel_len>(tprev, tcurr, tnext, srow + x, srcStride, drow, y, height - 1 - y, x - v_elem, width * nc - 1 - (x - v_elem), borderValue);
            ^
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:162:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(t_last, v_border, nc);
                              ^                           ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:65:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(tcurr, tnext[0], nc);
                              ^                          ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:327:13: note: in instantiation of function template specialization 'ppl::cv::aarch64::MorphRow<ppl::cv::aarch64::ErodeVecOp, float, 4, 3>' requested here
                MorphRow<morphOp, float, nc, kernel_len>(tprev, tcurr, tnext, srow + x, srcStride, drow, y, height - 1 - y, x - v_elem, width * nc - 1 - (x - v_elem), borderValue);
                ^
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:150:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(tnext[0], t_last, nc);
                              ^                           ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:330:9: note: in instantiation of function template specialization 'ppl::cv::aarch64::MorphRowLast<ppl::cv::aarch64::ErodeVecOp, float, 4, 3>' requested here
            MorphRowLast<morphOp, float, nc, kernel_len>(tprev, tcurr, tnext, srow + x, srcStride, drow, y, height - 1 - y, x - v_elem, width * nc - 1 - (x - v_elem), borderValue);
            ^
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:162:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(t_last, v_border, nc);
                              ^                           ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:65:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(tcurr, tnext[0], nc);
                              ^                          ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:327:13: note: in instantiation of function template specialization 'ppl::cv::aarch64::MorphRow<ppl::cv::aarch64::ErodeVecOp, float, 4, 5>' requested here
                MorphRow<morphOp, float, nc, kernel_len>(tprev, tcurr, tnext, srow + x, srcStride, drow, y, height - 1 - y, x - v_elem, width * nc - 1 - (x - v_elem), borderValue);
                ^
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:150:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(tnext[0], t_last, nc);
                              ^                           ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:330:9: note: in instantiation of function template specialization 'ppl::cv::aarch64::MorphRowLast<ppl::cv::aarch64::ErodeVecOp, float, 4, 5>' requested here
            MorphRowLast<morphOp, float, nc, kernel_len>(tprev, tcurr, tnext, srow + x, srcStride, drow, y, height - 1 - y, x - v_elem, width * nc - 1 - (x - v_elem), borderValue);
            ^
    /home/zz/work/github/ppl.cv/src/ppl/cv/aarch64/morph_f32.cpp:162:27: error: argument value 4 is outside the valid range [0, 3]
                    t_right = vextq_f32(t_last, v_border, nc);
                              ^                           ~~
    /home/zz/soft/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/include/arm_neon.h:5846:25: note: expanded from macro 'vextq_f32'
      __ret = (float32x4_t) __builtin_neon_vextq_v((int8x16_t)__s0, (int8x16_t)__s1, __p2, 41); \
                            ^                                                        ~~~~
    12 errors generated.
    make[2]: *** [CMakeFiles/pplcv_static.dir/build.make:272:CMakeFiles/pplcv_static.dir/src/ppl/cv/aarch64/morph_f32.cpp.o] 错误 1
    make[1]: *** [CMakeFiles/Makefile2:2269:CMakeFiles/pplcv_static.dir/all] 错误 2
    make: *** [Makefile:156:all] 错误 2
    
    

    Reproduce

    Create build/android-arm64-build.sh script with contents:

    #!/bin/bash
    
    ANDROID_NDK=~/soft/android-ndk-r21b
    TOOLCHAIN=$ANDROID_NDK/build/cmake/android.toolchain.cmake
    
    BUILD_DIR=android-arm64
    mkdir -p $BUILD_DIR
    cd $BUILD_DIR
    
    #-G Ninja # fail
    cmake \
        -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN \
        -DANDROID_LD=lld \
        -DANDROID_ABI="arm64-v8a" \
        -DANDROID_PLATFORM=android-24 \
        -DCMAKE_BUILD_TYPE=Release \
        -DHPCC_USE_AARCH64=ON \
        ../..
    
    #ninja
    #cmake --build . --verbose
    cmake --build .
    
    cd ..
    
    
    help wanted 
    opened by zchrissirhcz 9
  • find_package not found

    find_package not found

    What are the problems?(snapshots or detailed error messages)

    Installed the pplcv following the tutorial, but find package was not found.

    error message: By not providing "Findpplcv.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "pplcv", but CMake did not find one.

    Could not find a package configuration file provided by "pplcv" with any of the following names: pplcvConfig.cmake pplcv-config.cmake

    add the installation prefix of "pplcv" to CMAKE_PREFIX_PATH or set "pplcv_DIR" to a directory containing one of the above files. If "pplcv" provides a separate development package or SDK, be sure it has been installed.

    Which version(commit id or tag) of ppl.cv is used?

    v0.6.2 and latest

    What's the operating system ppl.cv runs on?

    ubuntu18.04

    What's the compiler and its version?

    gcc7

    What are the commands used to build ppl.cv?

    mmdeploy

    What are the execution commands?

    minimal code snippets for reproducing these problems(if necessary)

    opened by ywfwyht 4
  • fix cmake package for MSVC

    fix cmake package for MSVC

    On MSVC there is no "lib" prefix for libraries.

    This depends on openppl-public/ppl.common#24

    We need to bump ppl.common version in cmake after that PR is merged.

    opened by lzhangzz 4
  • [deps] Add gitee mirrors and option

    [deps] Add gitee mirrors and option

    Hi, OpenPPL Team

    This PR is for dependency speed up for China user that does not have good network access to GitHub.

    It provide an option PPLCV_DEPS_USE_GITEE as an alternative for download dependencies.

    This commit 561d9f4 works fine on my machine, however there is more work to do:

    • Can https://gitee.com/openppl-public automatically sync (e.g. everyday, or every push)
    • Change some git repo url and some tags to the latest, after the mirrors are all updated
    opened by zchrissirhcz 4
  • windows cuda版本支持?

    windows cuda版本支持?

    What are the problems?(snapshots or detailed error messages)

    windows vscode 编译 只生成了pplcommon_static.lib

    Which version(commit id or tag) of ppl.cv is used?

    main branch

    What's the operating system ppl.cv runs on?

    windows

    What's the compiler and its version?

    vs2019 amd 64

    What are the commands used to build ppl.cv?

    cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DHPCC_USE_CUDA=ON cmake --build . -j --config Release

    What are the execution commands?

    minimal code snippets for reproducing these problems(if necessary)

    opened by dengxbin 3
  • Fix a bug in warpaffine_linear()

    Fix a bug in warpaffine_linear()

    To convert float to int32 there, ought to use the trucating version instruction, not the round version. This bug caused obvious line breaks in the output image.

    opened by PYNing 3
  • benchmark failed to run due to argument number checking

    benchmark failed to run due to argument number checking

    Compiled with the latest commit:

    commit 7111be49dd54cba44faa2bc6fbb46bff1b553517 (HEAD -> master, origin/master, origin/HEAD)
    Author: ouguoyu <[email protected]>
    Date:   Sun Jan 16 20:30:28 2022 +0800
    
        [fix] do not include opencv2/opencv2.hpp in unittest/benchmark
    

    run the benchmark:

    /home/zz/work/github/ppl.cv/deps/benchmark/src/benchmark_register.cc:313: Args: Check `ArgsCnt() == -1 || ArgsCnt() == static_cast<int>(args.size())' failed. 
    zsh: abort (core dumped)  ./pplcv_benchmark
    

    my environment: Linux x64

    opened by zchrissirhcz 2
  • fix compile error on linux x64 platform

    fix compile error on linux x64 platform

    Hi, ppl team

    I compile the latest commit of ppl.cv on linux x64 (ubuntu 20.04, clang 10.0.0), and encounter compile errors.

    This PR provide my fixes. Hope they are correct and helpful for other wathers.

    Thanks.

    opened by zchrissirhcz 2
  • trivial case in CUDA resize not synchronized with stream argument

    trivial case in CUDA resize not synchronized with stream argument

    The stream argument is not passed to the following cudaMemcpyAsync when handling trivial cases. Causing the copy to be performed on the default stream instead of the passed one. https://github.com/openppl-public/ppl.cv/blob/eebdbd8ef1e831fa09079cf061752a8695b5dd02/src/ppl/cv/cuda/resize.cu#L1034-L1035 https://github.com/openppl-public/ppl.cv/blob/eebdbd8ef1e831fa09079cf061752a8695b5dd02/src/ppl/cv/cuda/resize.cu#L1228-L1229

    opened by lzhangzz 1
  • prefetch() vs prefetch_l1()

    prefetch() vs prefetch_l1()

    Hi, ppl.cv developers

    On arm64 platform, I benchmarked the resize() related functions, and notice the prefetching boost the speed significantly.

    What I'm confusing is, there are two wrapper functions, prefetch() and prefetch_l1(). Can they be merged into one? If not, what is the different of them?

    inline void prefetch(const void *ptr, size_t offset = 32 * 10)
    {
        __builtin_prefetch(reinterpret_cast<const char *>(ptr) + offset);
    }
    

    and

    inline void prefetch_l1(const void *ptr, size_t offset)
    {
        asm volatile(
            "prfm pldl1keep, [%0, %1]\n\t"
            :
            : "r"(ptr), "r"(offset)
            : "cc", "memory");
    }
    

    I read the GNU manual for __builtin_prefetch, but still not sure: https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

    opened by zchrissirhcz 1
C++ image processing and machine learning library with using of SIMD: SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX-512, VMX(Altivec) and VSX(Power7), NEON for ARM.

Introduction The Simd Library is a free open source image processing and machine learning library, designed for C and C++ programmers. It provides man

Ihar Yermalayeu 1.6k Jun 24, 2022
The CImg Library is a small and open-source C++ toolkit for image processing

http://cimg.eu The CImg Library is a small and open-source C++ toolkit for image processing, designed with these properties in mind: CImg defines clas

David Tschumperlé 1.1k Jun 27, 2022
A fast image processing library with low memory needs.

libvips : an image processing library Introduction libvips is a demand-driven, horizontally threaded image processing library. Compared to similar lib

libvips 16 Jun 19, 2022
GLSL Image Processing System

GIPS: The GLSL Image Processing System An image processing application that applies filters written in the OpenGL Shading Language (GLSL). This means

Martin Fiedler 52 Jun 15, 2022
PoC black/white image sequence to dumpy gif image sequence converter

PoC black/white image sequence to dumpy gif image sequence converter

null 63 May 28, 2022
The “Quite OK Image” format for fast, lossless image compression

The “Quite OK Image” format for fast, lossless image compression

Dominic Szablewski 5.6k Jun 24, 2022
HDRView is a simple research-oriented image viewer with an emphasis on examining and comparing high-dynamic range (HDR) images

HDRView is a simple research-oriented high-dynamic range image viewer with an emphasis on examining and comparing images, and including minimalistic tonemapping capabilities. HDRView currently supports reading EXR, PNG, TGA, BMP, HDR, JPG, GIF, PNM, PFM, and PSD images and writing EXR, HDR, PNG, TGA, PPM, PFM, and BMP images.

Wojciech Jarosz 103 Jun 16, 2022
This library provides a cross-platform image loading library in C11 for projects based on our foundation library

Image Library - Public Domain This library provides a cross-platform image loading library in C11 for projects based on our foundation library.

Mattias Jansson 1 Jan 29, 2022
Reading, writing, and processing images in a wide variety of file formats, using a format-agnostic API, aimed at VFX applications.

README for OpenImageIO Introduction The primary target audience for OIIO is VFX studios and developers of tools such as renderers, compositors, viewer

OpenImageIO 1.5k Jun 29, 2022
Video, Image and GIF upscale/enlarge(Super-Resolution) and Video frame interpolation. Achieved with Waifu2x, SRMD, RealSR, Anime4K, RIFE, CAIN, DAIN and ACNet.

Video, Image and GIF upscale/enlarge(Super-Resolution) and Video frame interpolation. Achieved with Waifu2x, SRMD, RealSR, Anime4K, RIFE, CAIN, DAIN and ACNet.

Aaron Feng 7k Jun 29, 2022
a generic C++ library for image analysis

VIGRA Computer Vision Library Copyright 1998-2013 by Ullrich Koethe This file is part of the VIGRA computer vision library. You may use,

Ullrich Koethe 368 Jun 25, 2022
Intel® Open Image Denoise library

Intel Open Image Denoise is an open source library of high-performance, high-quality denoising filters for images rendered with ray tracing

Intel® Open Image Denoise 1.3k Jun 19, 2022
Arduino PNG image decoder library

An 'embedded-friendly' (aka Arduino) PNG image decoding library

Larry Bank 91 Jun 24, 2022
libvot - A C++11 multi-thread library for image retrieval

libvot is a fast implementation of vocabulary tree, which is an algorithm widely used in image retrieval and computer vision. It usually comprises three components to build a image retrieval system using vocabulary tree: build a k-means tree using sift descriptors from images, register images into the database, query images against the database. I

Tianwei Shen 166 Apr 8, 2022
An 'embedded-friendly' (aka Arduino) JPEG image encoding library

Starting in the late 80's I wrote my own imaging codecs for the existing standards (CCITT G3/G4 was the first). I soon added GIF, JPEG and not long after that, the PNG specification was ratified. All of this code was "clean room" - written just from the specification. I used my imaging library in many projects and products over the years and recently decided that some of my codecs could get a new lease on life as open source, embedded-friendly libraries for microcontrollers.

Larry Bank 34 Jun 21, 2022
Small header-only C library to decompress any BC compressed image

Small header-only C library to decompress any BC compressed image

null 61 Jun 29, 2022
An image and texture viewer for tga, png, apng, exr, dds, gif, hdr, jpg, tif, ico, webp, and bmp files

An image and texture viewer for tga, png, apng, exr, dds, gif, hdr, jpg, tif, ico, webp, and bmp files. Uses Dear ImGui, OpenGL, and Tacent. Useful for game devs as it displays information like the presence of an alpha channel and querying specific pixels for their colour.

Tristan Grimmer 132 Jun 22, 2022