ACL Pack vs OpenCV: 4.72× Aggregate, Up to 78× Faster ARM64 Image Processing
If you are building computer vision on ARM64 — whether on Android, an embedded board, or ARM Linux — you have probably asked the same question: why is OpenCV so heavy, and can I go faster?
ACL Pack is a zero-dependency, C++17 image-processing library optimized for ARM64 NEON. It ships as a static library with 113 operator families (163 callable entries) and is designed to be a lightweight, fast alternative to OpenCV on mobile and edge devices.
What we measured
We ran the same operators on four ARM64 devices across seven image sizes, from 640×480 up to 4096×3072. Every test used the same input data and the same parameters for both libraries.
| Device | SoC | OS |
|---|---|---|
| Dimensity 9400 | MediaTek Dimensity 9400 | Android |
| Dimensity 9500 | MediaTek Dimensity 9500 | Android |
| Snapdragon 8 Gen 2 | Qualcomm Snapdragon 8 Gen 2 | Android |
| Snapdragon 8 Gen 3 | Qualcomm Snapdragon 8 Gen 3 | Android |
Highlights
- 72.3% of operator samples are faster than OpenCV on ARM64 (n=6864, NEON path across all 7 size tiers × 4 devices).
- Peak speedups: up to ~78× (
resize_nn_up4x_1ch),inRange_1ch76.42×,resize_area_up4x_1ch49.51×,bgr2Lab12.86×. - M-tier (1920×1280) aggregate speedup: 4.56×; full-matrix aggregate: 4.72× over OpenCV 4.13.0.
- Library size: ACL Pack static library is ~6 MB (paid tiers 6.2–7.5 MB); OpenCV runtime is 15–50 MB.
Sample benchmark
Peak per-operator speedups at the M tier (1920×1280) across the four-device cohort:
| Operator | Device | Speedup |
|---|---|---|
resize_nn_up4x_1ch | Snapdragon 8 Gen 3 | 78.22× |
inRange_1ch | Snapdragon 8 Gen 2 | 76.42× |
bgr2Lab | Snapdragon 8 Gen 3 | 12.86× |
Full numbers are in the performance whitepaper.
Why it is faster
- NEON hand-vectorization for the hot paths instead of generic C++ loops.
- No runtime dependencies — just a static
.aand a single header surface. - Operator-specific tuning — kernel shape, memory layout, and border handling are chosen per operator rather than forced through a generic abstraction.
When to use ACL Pack
- Android NDK apps where APK size matters.
- ARM Linux edge devices with limited storage.
- Preprocessing pipelines for on-device AI inference.
Try it
Download the trial build from the v1.0.3 release or read the full documentation.
Star the repo on GitHub and follow the Changelog for updates.