vendor: OpenCV 5.0.0 snapshot at 755e50675d97db9b7d449d8bd6b09888646f6c6e

This commit is contained in:
Gitea Mirror Bot
2026-08-22 00:11:13 +08:00
commit 12022378a3
3872 changed files with 2513409 additions and 0 deletions
+92
View File
@@ -0,0 +1,92 @@
/*
* Copyright (c) 2025 Qualcomm Innovation Center, Inc. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
#include "test_precomp.hpp"
namespace opencv_test { namespace {
TEST(ThresholdOtsuTest, accuracy)
{
applyTestTag(CV_TEST_TAG_FASTCV_SKIP_DSP);
//Initialize DSP
int initStatus = cv::fastcv::dsp::fcvdspinit();
ASSERT_EQ(initStatus, 0) << "Failed to initialize FastCV DSP";
cv::Mat src;
src.allocator = cv::fastcv::getQcAllocator();
cv::imread(cvtest::findDataFile("cv/detectors_descriptors_evaluation/planar/box_in_scene.png"), src, cv::IMREAD_GRAYSCALE);
ASSERT_FALSE(src.empty()) << "Could not read the image file.";
cv::Mat dst;
dst.allocator = cv::fastcv::getQcAllocator();
bool type = 0;
cv::fastcv::dsp::thresholdOtsu(src, dst, type);
// De-Initialize DSP
cv::fastcv::dsp::fcvdspdeinit();
EXPECT_FALSE(dst.empty());
EXPECT_EQ(src.size(), dst.size());
// Compare the result against the reference cv::threshold function with Otsu's method
cv::Mat referenceDst;
cv::threshold(src, referenceDst, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
double maxDifference = 10.0;
cv::Mat diff;
cv::absdiff(dst, referenceDst, diff);
double maxVal;
cv::minMaxLoc(diff, nullptr, &maxVal);
EXPECT_LE(maxVal, maxDifference) << "The custom threshold result differs from the reference result by more than the acceptable threshold.";
}
TEST(ThresholdOtsuTest, inPlaceAccuracy)
{
applyTestTag(CV_TEST_TAG_FASTCV_SKIP_DSP);
// Initialize DSP
int initStatus = cv::fastcv::dsp::fcvdspinit();
ASSERT_EQ(initStatus, 0) << "Failed to initialize FastCV DSP";
cv::Mat src;
src.allocator = cv::fastcv::getQcAllocator();
cv::imread(cvtest::findDataFile("cv/detectors_descriptors_evaluation/planar/box_in_scene.png"), src, cv::IMREAD_GRAYSCALE);
ASSERT_FALSE(src.empty()) << "Could not read the image file.";
// Use the same buffer for in-place operation
cv::Mat dst;
dst.allocator = cv::fastcv::getQcAllocator();
src.copyTo(dst);
bool type = false;
// Call the thresholdOtsu function for in-place operation
cv::fastcv::dsp::thresholdOtsu(dst, dst, type);
// De-Initialize DSP
cv::fastcv::dsp::fcvdspdeinit();
// Check if the output is not empty
EXPECT_FALSE(dst.empty());
EXPECT_EQ(src.size(), dst.size());
// Compare the result against the reference cv::threshold function with Otsu's method
cv::Mat referenceDst;
cv::threshold(src, referenceDst, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
double maxDifference = 10.0;
cv::Mat diff;
cv::absdiff(dst, referenceDst, diff);
double maxVal;
cv::minMaxLoc(diff, nullptr, &maxVal);
EXPECT_LE(maxVal, maxDifference) << "The in-place threshold result differs from the reference result by more than the acceptable threshold.";
}
}} // namespaces opencv_test, ::