1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-21 19:33:03 +04:00
Files
Karnav Shah f5d6fe5392 Merge pull request #28176 from shahkarnav115-beep:docs-animation-frame-duration
Docs(imgcodecs): clarify animation frame duration units #28176

### 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

Docs-only change. No code or tests affected.
2025-12-15 09:24:58 +03:00

2.9 KiB

Handling Animated Image Files

@tableofcontents

Original author Suleyman Turkmen (with help of ChatGPT)
Compatibility OpenCV >= 4.11

Goal

In this tutorial, you will learn how to:

  • Use cv::imreadanimation to load frames from animated image files.
  • Understand the structure and parameters of the cv::Animation structure.
  • Display individual frames from an animation.
  • Use cv::imwriteanimation to write cv::Animation to a file.

Source Code

@add_toggle_cpp

  • Downloadable code: Click here

  • Code at a glance: @include samples/cpp/tutorial_code/imgcodecs/animations.cpp @end_toggle

@add_toggle_python

  • Downloadable code: Click here

  • Code at a glance: @include samples/python/tutorial_code/imgcodecs/animations.py @end_toggle

Explanation

Initializing the Animation Structure

Initialize a cv::Animation structure to hold the frames from the animated image file.

@add_toggle_cpp @snippet cpp/tutorial_code/imgcodecs/animations.cpp init_animation @end_toggle

@add_toggle_python @snippet python/tutorial_code/imgcodecs/animations.py init_animation @end_toggle

Loading Frames

Use cv::imreadanimation to load frames from the specified file. Here, we load all frames from an animated WebP image.

@add_toggle_cpp @snippet cpp/tutorial_code/imgcodecs/animations.cpp read_animation @end_toggle

@add_toggle_python @snippet python/tutorial_code/imgcodecs/animations.py read_animation @end_toggle

Displaying Frames

Each frame in the animation.frames vector can be displayed as a standalone image. This loop iterates through each frame, displaying it in a window with a short delay to simulate the animation.

Note: Frame durations in cv::Animation are expressed in milliseconds. When displaying frames manually using cv::waitKey, make sure to use the corresponding duration value to preserve the original animation timing.

@add_toggle_cpp @snippet cpp/tutorial_code/imgcodecs/animations.cpp show_animation @end_toggle

@add_toggle_python @snippet python/tutorial_code/imgcodecs/animations.py show_animation @end_toggle

Saving Animation

@add_toggle_cpp @snippet cpp/tutorial_code/imgcodecs/animations.cpp write_animation @end_toggle

@add_toggle_python @snippet python/tutorial_code/imgcodecs/animations.py write_animation @end_toggle

Summary

The cv::imreadanimation and cv::imwriteanimation functions make it easy to work with animated image files by loading frames into a cv::Animation structure, allowing frame-by-frame processing. With these functions, you can load, process, and save frames from animated image files like GIF, AVIF, APNG, and WebP.