Skip to content

Add jxl (JPEG XL) codec support#26379

Merged
asmorkalov merged 26 commits intoopencv:4.xfrom
cdcseacave:jxl_codec
Dec 31, 2024
Merged

Add jxl (JPEG XL) codec support#26379
asmorkalov merged 26 commits intoopencv:4.xfrom
cdcseacave:jxl_codec

Conversation

@cdcseacave
Copy link
Copy Markdown
Contributor

@cdcseacave cdcseacave commented Oct 29, 2024

Pull Request Readiness Checklist

Related CI and Docker changes:

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

  • I agree to contribute to the project under Apache 2 License.
  • 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
  • The PR is proposed to the proper branch
  • There is a reference to the original bug report and related work JPEG XL format support in OpenCV #20178
  • There is accuracy test, performance test and test data in opencv_extra repository, if applicable
    Patch to opencv_extra has the same branch name.
  • The feature is well documented and sample code can be built with the project CMake

Copy link
Copy Markdown
Contributor

@asmorkalov asmorkalov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great job! The codec support will be definitely useful to many users.

@asmorkalov asmorkalov changed the base branch from master to 4.x October 29, 2024 06:12
@asmorkalov
Copy link
Copy Markdown
Contributor

asmorkalov commented Oct 29, 2024

I tried the patch with Ubuntu 24.04 (libjxl-dev:amd64 (0.7.0-10.2ubuntu6)) and observe the following issues:

  1. Library version is not detected by CMake:
--     JPEG XL:                     /usr/lib/x86_64-linux-gnu/libjxl.so /usr/lib/x86_64-linux-gnu/liblcms2.so /usr/lib/x86_64-linux-gnu/libjxl_threads.so /usr/lib/x86_64-linux-gnu/libbrotlicommon.so /usr/lib/x86_64-linux-gnu/libbrotlidec.so /usr/lib/x86_64-linux-gnu/libbrotlienc.so /usr/lib/x86_64-linux-gnu/libhwy.so (ver  / )
  1. Build fails:
[ 88%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_hdr.cpp.o
In file included from /mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmts.hpp:50,
                 from /mnt/Projects/Projects/opencv/modules/imgcodecs/src/loadsave.cpp:47:
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.hpp:78:44: warning: ignoring attributes on template argument ‘int (*)(FILE*)’ [-Wignored-attributes]
   78 |     std::unique_ptr<FILE, decltype(&fclose)> m_f;
      |                                            ^
[ 88%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_jpeg.cpp.o
[ 88%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_jpeg2000.cpp.o
[ 88%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_jpeg2000_openjpeg.cpp.o
[ 88%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_jpegxl.cpp.o
[ 92%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_pam.cpp.o
[ 92%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_pfm.cpp.o
In file included from /mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:43:
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.hpp:78:44: warning: ignoring attributes on template argument ‘int (*)(FILE*)’ [-Wignored-attributes]
   78 |     std::unique_ptr<FILE, decltype(&fclose)> m_f;
      |                                            ^
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp: In member function ‘bool cv::JpegXLDecoder::read(cv::Mat*)’:
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_SUCCESS’ not handled in switch [-Wswitch]
  167 |         switch (status) {
      |                ^
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_NEED_MORE_INPUT’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_NEED_PREVIEW_OUT_BUFFER’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_NEED_DC_OUT_BUFFER’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_NEED_IMAGE_OUT_BUFFER’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_JPEG_NEED_MORE_OUTPUT’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_BOX_NEED_MORE_OUTPUT’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_EXTENSIONS’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_COLOR_ENCODING’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_PREVIEW_IMAGE’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_FRAME’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_DC_IMAGE’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_JPEG_RECONSTRUCTION’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_BOX’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:167:16: warning: enumeration value ‘JXL_DEC_FRAME_PROGRESSION’ not handled in switch [-Wswitch]
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp: In member function ‘virtual bool cv::JpegXLEncoder::write(const cv::Mat&, const std::vector<int>&)’:
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:294:24: error: ‘TO_JXL_BOOL’ was not declared in this scope; did you mean ‘JXL_BOOL’?
  294 |     JXL_BOOL is_gray = TO_JXL_BOOL(format.num_channels < 3);
      |                        ^~~~~~~~~~~
      |                        JXL_BOOL
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:321:36: error: ‘JxlEncoderDistanceFromQuality’ was not declared in this scope
  321 |             const float distance = JxlEncoderDistanceFromQuality(quality);
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:356:44: warning: ignoring attributes on template argument ‘int (*)(FILE*)’ [-Wignored-attributes]
  356 |     std::unique_ptr<FILE, decltype(&fclose)> f(fopen(m_filename.c_str(), "wb"), fclose);

@cdcseacave
Copy link
Copy Markdown
Contributor Author

cdcseacave commented Oct 29, 2024

I do not get any of the errors above, obviously (tested on Windows and Ubuntu 22.04), but I think I fixed them for your system as well, except for the last error which I do not see anything wrong, the function is defined in encode.h like:

JXL_EXPORT float JxlEncoderDistanceFromQuality(float quality);

I see you used a very old version of the library. I used vcpkg both on windows and ubuntu, which offers a more recent version.

@asmorkalov
Copy link
Copy Markdown
Contributor

Cmake error on all platforms:

-- Could NOT find JPEGXL (missing: JPEGXL_LIBRARY JPEGXL_INCLUDE_DIR) 
CMake Error at cmake/OpenCVFindLibsGrfmt.cmake:228 (add_subdirectory):
  add_subdirectory given source "/home/ci/opencv/3rdparty/libjxl" which is
  not an existing directory.
Call Stack (most recent call first):
  CMakeLists.txt:791 (include)

-- Could NOT find JPEG-XL (libjxl). JPEG-XL will be built from sources
-- JPEG-XL libraries will be built from sources: jxl

@Kumataro
Copy link
Copy Markdown
Contributor

Kumataro commented Oct 29, 2024

Cmake error on all platforms:

This pull request expects to build libjxl from source if missing system-libjxl. (e.g. it instelled with apt / yum / dpkg / ... ).
However it seems 3rdparty/libjxl folder is not contained in this pull request.
So is causes missing this source folder. I think adding this folder is needed.

I see you used a very old version of the library. I used vcpkg both on windows and ubuntu, which offers a more recent version.

libjxl v0.7.0 had been released at 2022, so it is slightly old. And vckpkg supports v0.11.0/ latest release,
But It seems that v0.7.0 is used in the some systems/OSs. ( https://github.com/libjxl/libjxl?tab=readme-ov-file#installation ).

And we can limit minimum version of libjxl for api and/or header compatibilty reason.
It is better to use built-in libjxl(v0.11.0+) instead of older system-libjxl.

@cdcseacave
Copy link
Copy Markdown
Contributor Author

fixed both, pls review again

@cdcseacave cdcseacave requested a review from asmorkalov October 30, 2024 07:53
@asmorkalov
Copy link
Copy Markdown
Contributor

Test imgcodecs/Imgcodecs_Image.read_write_BGR/3, where GetParam() = "jxl" crashes on my side with Ubuntu 24.04 provided package:

Thread 1 "opencv_test_img" received signal SIGSEGV, Segmentation fault.
Download failed: Invalid argument.  Continuing without source file ./libio/./libio/iofwrite.c.
__GI__IO_fwrite (buf=0x555555fb8550, size=1, count=16384, fp=0x0) at ./libio/iofwrite.c:37
warning: 37     ./libio/iofwrite.c: No such file or directory
(gdb) bt
#0  __GI__IO_fwrite (buf=0x555555fb8550, size=1, count=16384, fp=0x0) at ./libio/iofwrite.c:37
#1  0x00007ffff7c63448 in cv::JpegXLEncoder::write (this=0x555555ea26b0, img=..., params=std::vector of length 0, capacity 0) at /mnt/Projects/Projects/opencv/modules/imgcodecs/src/grfmt_jpegxl.cpp:333
#2  0x00007ffff7c2d33d in cv::imencode (ext=".jxl", _img=..., buf=std::vector of length 0, capacity 0, params_=std::vector of length 0, capacity 0) at /mnt/Projects/Projects/opencv/modules/imgcodecs/src/loadsave.cpp:1204
#3  0x00005555555cef9b in opencv_test::(anonymous namespace)::test_image_io (image=..., fname="/tmp/__opencv_temp.rvAaAX.jxl", ext="jxl", imreadFlag=1, psnrThreshold=100) at /mnt/Projects/Projects/opencv/modules/imgcodecs/test/test_read_write.cpp:183
#4  0x00005555555d0729 in opencv_test::(anonymous namespace)::Imgcodecs_Image_read_write_BGR_Test::Body (this=0x5555562286a0) at /mnt/Projects/Projects/opencv/modules/imgcodecs/test/test_read_write.cpp:253
#5  0x00005555555d04a2 in opencv_test::(anonymous namespace)::Imgcodecs_Image_read_write_BGR_Test::TestBody (this=0x5555562286a0) at /mnt/Projects/Projects/opencv/modules/imgcodecs/test/test_read_write.cpp:236
#6  0x000055555567c146 in testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void> (object=0x5555562286a0, method=&virtual testing::Test::TestBody(), location=0x5555556aa8a3 "the test body")
    at /mnt/Projects/Projects/opencv/modules/ts/src/ts_gtest.cpp:3919
#7  0x000055555567593a in testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void> (object=0x5555562286a0, method=&virtual testing::Test::TestBody(), location=0x5555556aa8a3 "the test body")
    at /mnt/Projects/Projects/opencv/modules/ts/src/ts_gtest.cpp:3955
#8  0x0000555555659d5c in testing::Test::Run (this=0x5555562286a0) at /mnt/Projects/Projects/opencv/modules/ts/src/ts_gtest.cpp:3993
#9  0x000055555565a82b in testing::TestInfo::Run (this=0x55555575dfe0) at /mnt/Projects/Projects/opencv/modules/ts/src/ts_gtest.cpp:4169
#10 0x000055555565afdc in testing::TestCase::Run (this=0x55555575dc60) at /mnt/Projects/Projects/opencv/modules/ts/src/ts_gtest.cpp:4287
#11 0x0000555555667a65 in testing::internal::UnitTestImpl::RunAllTests (this=0x55555571b460) at /mnt/Projects/Projects/opencv/modules/ts/src/ts_gtest.cpp:6662
#12 0x000055555567d24b in testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> (object=0x55555571b460, 
    method=(bool (testing::internal::UnitTestImpl::*)(class testing::internal::UnitTestImpl * const)) 0x55555566779c <testing::internal::UnitTestImpl::RunAllTests()>, location=0x5555556ab160 "auxiliary test code (environments or event listeners)")
    at /mnt/Projects/Projects/opencv/modules/ts/src/ts_gtest.cpp:3919
#13 0x0000555555676a4d in testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> (object=0x55555571b460, 
    method=(bool (testing::internal::UnitTestImpl::*)(class testing::internal::UnitTestImpl * const)) 0x55555566779c <testing::internal::UnitTestImpl::RunAllTests()>, location=0x5555556ab160 "auxiliary test code (environments or event listeners)")
    at /mnt/Projects/Projects/opencv/modules/ts/src/ts_gtest.cpp:3955
#14 0x0000555555665fec in testing::UnitTest::Run (this=0x555555707500 <testing::UnitTest::GetInstance()::instance>) at /mnt/Projects/Projects/opencv/modules/ts/src/ts_gtest.cpp:6271
#15 0x00005555555bf483 in RUN_ALL_TESTS () at /mnt/Projects/Projects/opencv/modules/ts/include/opencv2/ts/ts_gtest.h:22240
#16 0x00005555555bf68b in main (argc=2, argv=0x7fffffffd8e8) at /mnt/Projects/Projects/opencv/modules/imgcodecs/test/test_main.cpp:10

@cdcseacave
Copy link
Copy Markdown
Contributor Author

I can not reproduce the error, tried on Ubuntu 22.04 and Windows 10.

@asmorkalov
Copy link
Copy Markdown
Contributor

There is some CMake issue on Mac. Looks like we have some instance installed there. See CI logs:

-- Found JPEGXL: /usr/local/lib/libjxl.dylib;/usr/local/lib/liblcms2.dylib;/usr/local/lib/libjxl_threads.dylib;/usr/local/lib/libbrotlicommon.dylib;/usr/local/lib/libbrotlidec.dylib;/usr/local/lib/libbrotlienc.dylib;/usr/local/lib/libhwy.a  
CMake Error at cmake/OpenCVFindJPEGXL.cmake:132 (file):
  file failed to open for reading (No such file or directory):

    /usr/local/include/jxl/version.h
Call Stack (most recent call first):
  cmake/OpenCVFindLibsGrfmt.cmake:218 (include)
  CMakeLists.txt:791 (include)


-- Found system JPEG-XL: ver ..
CMake Error at cmake/OpenCVFindJPEGXL.cmake:133 (string):
  string sub-command REGEX, mode MATCH needs at least 5 arguments total to
  command.
Call Stack (most recent call first):
  cmake/OpenCVFindLibsGrfmt.cmake:218 (include)
  CMakeLists.txt:791 (include)


CMake Error at cmake/OpenCVFindJPEGXL.cmake:135 (string):
  string sub-command REGEX, mode MATCH needs at least 5 arguments total to
  command.
Call Stack (most recent call first):
  cmake/OpenCVFindLibsGrfmt.cmake:218 (include)
  CMakeLists.txt:791 (include)


CMake Error at cmake/OpenCVFindJPEGXL.cmake:137 (string):
  string sub-command REGEX, mode MATCH needs at least 5 arguments total to
  command.
Call Stack (most recent call first):
  cmake/OpenCVFindLibsGrfmt.cmake:218 (include)
  CMakeLists.txt:791 (include)

@cdcseacave
Copy link
Copy Markdown
Contributor Author

It seems the version.h file does not exists even though the search location seems correct. I am not interested in supporting all ancient versions of the jxl library.

@cdcseacave
Copy link
Copy Markdown
Contributor Author

Pls feel free to take this PR farther. I feel I can not help anymore with all the opencv integration details.

@Kumataro
Copy link
Copy Markdown
Contributor

Kumataro commented Nov 1, 2024

I tried with 0.7.0 (from apt) and 0.11.0 (from vcpkg).
But alpha channel support on encoding seems to not work well.

https://github.com/libjxl/libjxl/blob/adeeccc415f7c18e6a1732d4c9d6d905ed8e2f9b/lib/jxl/encode.cc#L1229

  • info->num_color_channnels should be 1 or 3.
  • info->num_extra_channels, info->alpha_bits and info->alpha_exponent_bit should be set.

( Umm... it may be need to continue changes, so does new pull request from my repos need ? )

@asmorkalov
Copy link
Copy Markdown
Contributor

( Umm... it may be need to continue changes, so does new pull request from my repos need ? ) - yes. We will see CI status

@Kumataro
Copy link
Copy Markdown
Contributor

Kumataro commented Nov 1, 2024

yes. We will see CI status

OK, thank you for your reply, I'll make new pull request from my repos and fix at tomorrow.

@asmorkalov asmorkalov self-assigned this Nov 6, 2024
@cdcseacave
Copy link
Copy Markdown
Contributor Author

Thank you all for helping we this. I have the sens we are very close to the merge now, but it seems there is still a build check failing, but not clear what. Is it related to JXL interface code so that I can try to help?

@Kumataro
Copy link
Copy Markdown
Contributor

Kumataro commented Nov 7, 2024

Hi, could you open "Annotations" in the top of test results, please ?
This is about CI server problem, not patch.

This request was automatically failed because there were no enabled runners online to process the request for more than 1 days.

New commit runs CI again, so it will be help about this problem.

And I added WITH_JPEGXL describe on document. 149472c
I hope to merge this changes into main PR. after it.
If main PR is updated, CI will run again.

@Kumataro
Copy link
Copy Markdown
Contributor

Kumataro commented Nov 7, 2024

Umm... it seems that another trouble is happend on CI server (windows-1) .
If this trouble is happend, Win64 on ”default" may be failed.

fatal: not enough memory for initializationprogram finished with exit code 128
elapsedTime=0.121000

https://pullrequest.opencv.org/buildbot/builders/precommit_windows64/builds/107630/steps/Fetch%20opencv%20opencv/logs/stdio
https://pullrequest.opencv.org/buildbot/builders/precommit_windows64/builds/107628/steps/Fetch%20opencv%20opencv/logs/stdio

if(NOT OPENCV_SKIP_JPEGXL_FIND_PACKAGE)
find_package(PkgConfig QUIET)
if (PkgConfig_FOUND)
pkg_check_modules(PC_JPEGXL QUIET jxl)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried building standalone libjxl and it uses libjxl name for pkg-config, so this line fails to find it. I understand that this file is taken from another project, but perhaps we could tune it slightly for our needs.

Another thing in my opinion is that it mixes pkg-config and separate find_* calls, it could result in mixing incompatible library versions - some found by pkg-config, others from system root. Maybe it would be better to add two blocks:

# 1. try pkg-config
pkg_check_modules(...)
if(FOUND)
  # create targets using pc
  # success
end()

# 2. manual detection
find_path(...)
find_library(...)
...
if(..all components were found...)
  # create targets using found components
  # success
endif()

return true;
break;
}
case JXL_DEC_FULL_IMAGE: {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it possible that this event will occure before JXL_DEC_BASIC_INFO? I didn't find this guarantee in the libjxl documentation.

#]=======================================================================]

if(NOT OPENCV_SKIP_JPEGXL_FIND_PACKAGE)
find_package(PkgConfig QUIET)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is the same call in the root cmake-file:

find_package(PkgConfig QUIET)

We don't need to repeat it here.

@Kumataro
Copy link
Copy Markdown
Contributor

Kumataro commented Nov 8, 2024

I cannot commit into your repos directly.
So I will leave it to you to make fixing it for code review.
If there are some question, I'll help you.

Copy link
Copy Markdown
Contributor

@asmorkalov asmorkalov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 tested manually with Ubuntu 24.04 and apt-provided jpegxl.

Comment on lines +117 to +118
if (!pimg->isContinuous())
return false;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Log warning at least.

case CV_8U:
col = cv::Scalar(124, 76, 42, 192);
th = 3; // = 255 / 100 (1%);
break;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add assert to default branch.

case CV_8U:
col = cv::Scalar(124, 76, 42, 192);
th = 3; // = 255 / 100 (1%);
break;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add assert to default branch.

@asmorkalov asmorkalov merged commit 1db9827 into opencv:4.x Dec 31, 2024
@asmorkalov asmorkalov mentioned this pull request Jan 15, 2025
shyama7004 pushed a commit to shyama7004/opencv that referenced this pull request Jan 20, 2025
Add jxl (JPEG XL) codec support opencv#26379

### Pull Request Readiness Checklist

Related CI and Docker changes:
- opencv/ci-gha-workflow#190
- opencv-infrastructure/opencv-gha-dockerfile#44

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 opencv#20178
- [ ] 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
NanQin555 pushed a commit to NanQin555/opencv that referenced this pull request Feb 24, 2025
Add jxl (JPEG XL) codec support opencv#26379

### Pull Request Readiness Checklist

Related CI and Docker changes:
- opencv/ci-gha-workflow#190
- opencv-infrastructure/opencv-gha-dockerfile#44

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 opencv#20178
- [ ] 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants