// Copyright 2019 The MediaPipe Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Get a cv::Mat view of the ImageFrame (this is efficient): // ::mediapipe::formats::MatView(&frame); // // Copying data from raw data (stored contiguously): // frame.CopyPixelData(format, width, height, raw_data_ptr, // ImageFrame::kDefaultAlignmentBoundary); // // Convert an RGB ImageFrame (rgb_frame) to Grayscale: // ImageFrame gray_frame(ImageFormat::GRAY8, rgb_frame.Width(), // rgb_frame.Height()); // cv::Mat rgb_frame_mat = ::mediapipe::formats::MatView(&rgb_frame); // cv::Mat gray_frame_mat = ::mediapipe::formats::MatView(&gray_frame); // cv::cvtColor(rgb_frame_mat, gray_frame_mat, CV_RGB2GRAY); // // Resize an ImageFrame: // ImageFrame small_image(ImageFormat::GRAY8, 10, 10); // cv::Mat destination = ::mediapipe::formats::MatView(&small_image); // cv::resize(::mediapipe::formats::MatView(&large_image), destination, // destination.size(), 0, 0, cv::INTER_LINEAR); #ifndef MEDIAPIPE_FRAMEWORK_FORMATS_IMAGE_FRAME_H_ #define MEDIAPIPE_FRAMEWORK_FORMATS_IMAGE_FRAME_H_ #include <cstdint> #include <functional> #include <memory> #include <string> #include "absl/base/attributes.h" #include "mediapipe/framework/formats/image_format.pb.h" #include "mediapipe/framework/port.h" #include "mediapipe/framework/tool/type_util.h" #define IMAGE_FRAME_RAW_IMAGE … namespace mediapipe { // A container for storing an image or a video frame, in one of several // formats. Pixels are encoded row-major in an interleaved fashion. // // Formats supported by ImageFrame are listed in the ImageFormat proto. // It is the intention of ImageFormat to specify both the data format // and the colorspace used. For example GRAY8 and GRAY16 both use the // same colorspace but have different formats. Although it would be // possible to keep HSV, linearRGB, or BGR values inside an ImageFrame // (with format SRGB) this is an abuse of the class. If you need a new // format, please add one to ImageFormat::Format. // // Do not assume that the pixel data is stored contiguously. It may be // stored with row padding for alignment purposes. class ImageFrame { … }; } // namespace mediapipe #endif // MEDIAPIPE_FRAMEWORK_FORMATS_IMAGE_FRAME_H_