summaryrefslogtreecommitdiff
path: root/python/openvino/runtime/common/demo_utils/src/image_utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'python/openvino/runtime/common/demo_utils/src/image_utils.cpp')
-rw-r--r--python/openvino/runtime/common/demo_utils/src/image_utils.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/python/openvino/runtime/common/demo_utils/src/image_utils.cpp b/python/openvino/runtime/common/demo_utils/src/image_utils.cpp
new file mode 100644
index 0000000..039dd66
--- /dev/null
+++ b/python/openvino/runtime/common/demo_utils/src/image_utils.cpp
@@ -0,0 +1,55 @@
+/*
+// Copyright (C) 2021-2022 Intel Corporation
+//
+// 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.
+*/
+
+#include "utils/image_utils.h"
+
+cv::Mat resizeImageExt(const cv::Mat& mat, int width, int height, RESIZE_MODE resizeMode,
+ cv::InterpolationFlags interpolationMode, cv::Rect* roi, cv::Scalar BorderConstant) {
+ if (width == mat.cols && height == mat.rows) {
+ return mat;
+ }
+
+ cv::Mat dst;
+
+ switch (resizeMode) {
+ case RESIZE_FILL:
+ {
+ cv::resize(mat, dst, cv::Size(width, height), interpolationMode);
+ if (roi) {
+ *roi = cv::Rect(0, 0, width, height);
+ }
+ break;
+ }
+ case RESIZE_KEEP_ASPECT:
+ case RESIZE_KEEP_ASPECT_LETTERBOX:
+ {
+ double scale = std::min(static_cast<double>(width) / mat.cols, static_cast<double>(height) / mat.rows);
+ cv::Mat resizedImage;
+ cv::resize(mat, resizedImage, cv::Size(0, 0), scale, scale, interpolationMode);
+
+ int dx = resizeMode == RESIZE_KEEP_ASPECT ? 0 : (width - resizedImage.cols) / 2;
+ int dy = resizeMode == RESIZE_KEEP_ASPECT ? 0 : (height - resizedImage.rows) / 2;
+
+ cv::copyMakeBorder(resizedImage, dst, dy, height - resizedImage.rows - dy,
+ dx, width - resizedImage.cols - dx, cv::BORDER_CONSTANT, BorderConstant);
+ if (roi) {
+ *roi = cv::Rect(dx, dy, resizedImage.cols, resizedImage.rows);
+ }
+ break;
+ }
+ }
+ return dst;
+}