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.

Comments
  • 一个线程安全的问题

    一个线程安全的问题

    src/ppl/cv/cuda/warp.hpp 第275行 线程调用transform.calculateCoordinates会改变一个transform实例内的x,y值。如果多个线程同时调用,他们操作的transoform实例属于同一个,我想这里是否需要考虑线程安全的问题?

    template <typename Transform>
    __global__
    void warpLinearKernel(const uchar* src, int src_rows, int src_cols,
                          int channels, int src_stride, Transform transform,
                          uchar* dst, int dst_rows, int dst_cols, int dst_stride,
                          BorderType border_type, uchar border_value) {
      int element_x = (blockIdx.x << kBlockShiftX0) + threadIdx.x;
      int element_y = (blockIdx.y << kBlockShiftY0) + threadIdx.y;
      if (element_x >= dst_cols || element_y >= dst_rows) {
        return;
      }
    
      transform.calculateCoordinates(element_x, element_y);
      float src_x = transform.getX();
      float src_y = transform.getY();
    
    
    opened by zjhellofss 9
  • 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
  • build failed saying

    build failed saying "No SOURCES given to target: pplcv_static"

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

    build failed image

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

    master branch

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

    windows 11

    What's the compiler and its version?

    Visual Studio 16 2019 Win64

    What are the commands used to build ppl.cv?

    build.bat -G "Visual Studio 16 2019 Win64" -DPPLCV_USE_X86_64=ON

    What are the execution commands?

    build.bat -G "Visual Studio 16 2019 Win64" -DPPLCV_USE_X86_64=ON

    minimal code snippets for reproducing these problems(if necessary)

    opened by huanghaifeng1234 1
  • [Feature] Could ppl.cv support 'bicubic' resize?

    [Feature] Could ppl.cv support 'bicubic' resize?

    MMDeploy inference SDK failed to perform swin-transform inference on CUDA platform because ppl.cv doesn't support 'bicubic' resize

    https://github.com/open-mmlab/mmclassification/blob/2495400a98a3da9bd8cfb3731a711f4c77cc56a3/configs/base/datasets/imagenet_bs64_swin_224.py#L46

    opened by lvhan028 3
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.7k Jan 5, 2023
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.2k Jan 3, 2023
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 26 Nov 10, 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 57 Nov 29, 2022
PoC black/white image sequence to dumpy gif image sequence converter

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

null 69 Dec 9, 2022
The “Quite OK Image” format for fast, lossless image compression

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

Dominic Szablewski 6k Dec 30, 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 177 Jan 5, 2023
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.6k Jan 2, 2023
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 8.7k Jan 7, 2023
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 378 Dec 30, 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 Dec 28, 2022
Arduino PNG image decoder library

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

Larry Bank 102 Jan 6, 2023
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 174 Dec 22, 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 38 Dec 30, 2022
Small header-only C library to decompress any BC compressed image

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

null 92 Jan 1, 2023
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 159 Dec 31, 2022