mirror of
https://github.com/opencv/opencv.git
synced 2026-07-21 19:33:03 +04:00
a3a4d4adac
Added harfbuzz; use it instead of STB to render text #29300 Merge with https://github.com/opencv/opencv_extra/pull/1378. This is the next big step to improve font rendering in OpenCV 5.x. See #18760, #26301. See also OpenCV 5.0 release notes, where it was pointed out that complex scripts are not rendered correctly, and HarfBuzz integration is needed to fix it. So, here it is — HarfBuzz integration: * Removed tweaked STB engine. STB truetype rendering engine was included into OpenCV 5.0-pre/5.0 and it was extended to instantiate and render variable fonts, but the support was incomplete and immature. * Instead, we now use [HarfBuzz](https://github.com/harfbuzz/harfbuzz) — famous font shaping library and now also font rendering library, used by many big companies and organizations. * As a result, we now correctly render complex scripts, such as arabic or devanagari, correctly handle font ligatures (ff, fi, ft etc.) <img width="1300" height="600" alt="text_test" src="https://github.com/user-attachments/assets/a7d2c754-0fcf-40f8-8104-578f3a14850b" /> * Potentially, we could also support color emoji, but that would be a next step. * As with STB-based engine, glyphs are cached (the same glyph from the same font is not rendered twice), so the performance should be on par with the previous engine. * When OpenCV is built with `-DWITH_HARFBUZZ=ON`, which is set by default, it tries to detect HarfBuzz in the system and use it. If it's not detected, OpenCV builds our own small subset of HarfBuzz. The following table compares size of libopencv_imgproc.dylib.5.0.0 (Release mode) in different configurations: | Configuration | libopencv_imgproc (stripped) | delta vs 5.0 | |----------------------------------------|------------------------------|----------| | imgproc without text rendering (`-DWITH_HARFBUZZ=OFF`) | 4.27 MB | −2.35 MB | | imgproc with stb-based engine (5.0) | 6.62 MB | 0.0 Mb | | imgproc with HarfBuzz-based engine (this PR) | 7.07 MB | +0.45 MB | The biggest source of the size increase when OpenCV is built with text rendering support (STB- or Harfbuzz-based) is that imgproc in this case includes .ttf fonts (Rubik and 'Wen Quan Yi Micro Hei'), which are gzip-compressed, but still have noticeable size, especially 'Wen Quan Yi' (~2Mb). HarfBuzz itself, compared to STB engine, adds just 0.45Mb, or ~7% to imgproc size. On other platforms (Linux x64, Windows), where IPP or other acceleration libraries are linked into libopencv_imgproc, the harfbuzz footprint is even less noticeable. ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [x] The PR is proposed to the proper branch - [x] There is a reference to the original bug report and related work - [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [x] The feature is well documented and sample code can be built with the project CMake
This folder contains libraries and headers of a few very popular still image codecs
used by imgcodecs module.
The libraries and headers are preferably to build Win32 and Win64 versions of OpenCV.
On UNIX systems all the libraries are automatically detected by configure script.
In order to use these versions of libraries instead of system ones on UNIX systems you
should use BUILD_<library_name> CMake flags (for example, BUILD_PNG for the libpng library).
------------------------------------------------------------------------------------
libjpeg-turbo libjpeg-turbo is covered by three compatible BSD-style open source licenses.
Refer to [LICENSE.md](libjpeg-turbo/LICENSE.md) for a roll-up of license terms.
Site: https://github.com/libjpeg-turbo/libjpeg-turbo
API is compatible with original libjpeg.
WITH_JPEG CMake option must be ON to add libjpeg-turbo support to imgcodecs.
SIMD instructions are enabled by default. Use ENABLE_LIBJPEG_TURBO_SIMD to control SIMD instructions.
------------------------------------------------------------------------------------
libpng Portable Network Graphics library.
The license and copyright notes can be found in libpng/LICENSE.
See libpng home page http://www.libpng.org
for details and links to the source code
WITH_PNG CMake option must be ON to add libpng support to imgcodecs.
libspng Portable Network Graphics library.
The license and copyright notes can be found in libspng/LICENSE.
See libspng home page https://libspng.org
for details and links to the source code
WITH_SPNG CMake option must be ON to add libspng support to imgcodecs
------------------------------------------------------------------------------------
libtiff Tag Image File Format (TIFF) Software
Copyright (c) 1988-1997 Sam Leffler
Copyright (c) 1991-1997 Silicon Graphics, Inc.
See libtiff home page #1 http://www.simplesystems.org/libtiff/
#2 https://libtiff.gitlab.io/libtiff/
for details and links to the source code
WITH_TIFF CMake option must be ON to add libtiff & zlib support to imgcodecs.
------------------------------------------------------------------------------------
zlib General purpose LZ77 compression library
Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler.
See zlib home page http://www.zlib.net
for details and links to the source code
zlib-ng zlib data compression library for the next generation systems
(C) 1995-2013 Jean-loup Gailly and Mark Adler
See zlib-ng official GitHub repository
https://github.com/zlib-ng/zlib-ng.git
for details and links to source code
WITH_ZLIB_NG CMake option must be ON to use zlib-ng as the zlib implementation.
------------------------------------------------------------------------------------
jasper JasPer is a collection of software
(i.e., a library and application programs) for the coding
and manipulation of images. This software can handle image data in a
variety of formats. One such format supported by JasPer is the JPEG-2000
format defined in ISO/IEC 15444-1.
Copyright (c) 1999-2000 Image Power, Inc.
Copyright (c) 1999-2000 The University of British Columbia
Copyright (c) 2001-2003 Michael David Adams
See JasPer official GitHub repository
https://github.com/jasper-software/jasper.git
for details and links to source code
------------------------------------------------------------------------------------
mlas Microsoft Linear Algebra Subprograms — processor-optimized
GEMM kernels and platform-specific threading code.
Vendored from ONNX Runtime (onnxruntime/core/mlas/), MIT licensed.
Copyright (c) Microsoft Corporation
Additional MIT-licensed contributions in the source tree:
Copyright 2025 Arm Limited (lib/kleidiai/)
Copyright 2025 FUJITSU LIMITED (erf/gelu neon fp16)
License: see mlas/LICENSE
Provenance and local patches: see mlas/README.md
Upstream: https://github.com/microsoft/onnxruntime
Used by the dnn module's SGEMM dispatch path. Built as
an OBJECT library and linked into opencv_dnn when the
host arch/OS is wired up (HAVE_MLAS).
------------------------------------------------------------------------------------
ffmpeg FFmpeg is a complete, cross-platform solution to record,
convert and stream audio and video. It includes libavcodec -
the leading audio/video codec library, and also libavformat, libavutils and
other helper libraries that are used by OpenCV (in videoio module) to
read and write video files.
Copyright (c) 2001 Fabrice Bellard
The project homepage: http://ffmpeg.org/.
* On Linux/OSX we link user-installed ffmpeg (or ffmpeg fork libav).
* On Windows we use pre-built ffmpeg binaries,
see opencv/3rdparty/ffmpeg/readme.txt for details and licensing information
------------------------------------------------------------------------------------