如何对用OpenCV开发的API进行测试 (Google Test 版本)

如何对用OpenCV开发的API进行测试 (Google Test 版本)

如何对用OpenCV开发的API进行测试

假设你想测试一个使用OpenCV开发的图像处理API,例如一个图像滤波函数。以下是一种测试方法的示例:

  1. 准备测试环境:首先,需要安装OpenCV库,并设置好C++开发环境。

  2. 编写测试代码:创建一个新的C++文件,引入必要的OpenCV头文件和测试框架头文件(如Google Test)。

    cpp 复制代码
    #include <opencv2/opencv.hpp>
    #include <gtest/gtest.h>
    
    // 测试函数原型声明
    cv::Mat customImageFilter(const cv::Mat &inputImage);
    
    TEST(ImageFilterTest, BasicFiltering) {
        // 准备测试数据
        cv::Mat inputImage = cv::Mat::ones(100, 100, CV_8UC1) * 255; // 创建一个100x100的全白图像
        cv::Mat expectedResult = ...; // 根据你的滤波逻辑定义预期结果
    
        // 调用待测试的图像处理API
        cv::Mat result = customImageFilter(inputImage);
    
        // 验证结果
        EXPECT_EQ(expectedResult.size(), result.size());
        for (int i = 0; i < result.rows; ++i) {
            for (int j = 0; j < result.cols; ++j) {
                EXPECT_EQ(expectedResult.at<uchar>(i, j), result.at<uchar>(i, j));
            }
        }
    }
    
    int main(int argc, char **argv) {
        ::testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }
  3. 编译和运行测试:使用合适的编译器编译测试代码,并运行测试。测试框架会自动执行所有测试用例,并报告测试结果。

断言介绍

断言

gtest 使用一系列断言的宏来检查值是否符合预期,主要分为两类:ASSERT 和 EXPECT。区别在于 ASSERT 不通过的时候会认为是一个 fatal 的错误,退出当前函数(只是函数)。而 EXPECT 失败的话会继续运行当前函数,所以对于函数内几个失败可以同时报告出来。通常我们用 EXPECT 级别的断言就好,除非你认为当前检查点失败后函数的后续检查没有意义。

基础的断言

Fatal assertion Nonfatal assertion Verifies
ASSERT_TRUE(condition ); EXPECT_TRUE(condition ); condition is true
ASSERT_FALSE(condition ); EXPECT_FALSE(condition ); condition is false

数值比较

Fatal assertion Nonfatal assertion Verifies
ASSERT_EQ(val1 , val2 ); EXPECT_EQ(val1 , val2 ); val1 == val2
ASSERT_NE(val1 , val2 ); EXPECT_NE(val1 , val2 ); val1 != val2
ASSERT_LT(val1 , val2 ); EXPECT_LT(val1 , val2 ); val1 < val2
ASSERT_LE(val1 , val2 ); EXPECT_LE(val1 , val2 ); val1 <= val2
ASSERT_GT(val1 , val2 ); EXPECT_GT(val1 , val2 ); val1 > val2
ASSERT_GE(val1 , val2 ); EXPECT_GE(val1 , val2 ); val1 >= val2

字符串比较

Fatal assertion Nonfatal assertion Verifies
ASSERT_STREQ(str1 , str2 ); EXPECT_STREQ(str1 , _str_2); the two C strings have the same content
ASSERT_STRNE(str1 , str2 ); EXPECT_STRNE(str1 , str2 ); the two C strings have different content
ASSERT_STRCASEEQ(str1 , str2 ); EXPECT_STRCASEEQ(str1 , str2 ); the two C strings have the same content, ignoring case
ASSERT_STRCASENE(str1 , str2 ); EXPECT_STRCASENE(str1 , str2 ); the two C strings have different content, ignoring case
相关推荐
智慧物业老杨1 小时前
物业日常巡查的数智化重构:从“打卡式巡检“到“闭环式风控“
android·java·人工智能·系统架构·rxjava
吴佳浩4 小时前
Skill 为什么不同于 Tool?Agent 技能库的自演进与动态加载机制
人工智能·agent·ai编程
大模型任我行7 小时前
谷歌:“课程学习”融入扩散模型强化学习
人工智能·语言模型·自然语言处理·论文笔记
AIGCmagic社区7 小时前
具身智能专题:机器人也有Scaling Law?智元GE-Act 2.0用3万小时真机数据给出答案
人工智能·aigc·具身智能
Rosanci8 小时前
谷歌浏览器插件开发实战指南:从 Hello World 到上架发布
大数据·人工智能·chrome·程序人生
明月_清风8 小时前
AI 越来越强,程序员真正的价值到底是什么?
人工智能·后端
m0_466525299 小时前
云从科技上线云起ModelHub:AI团队时代的模型算力基础设施
大数据·人工智能·科技
火山引擎开发者社区9 小时前
OpenViking:给 Codex 加上长期记忆
人工智能
荆棘鸟智能9 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
火山引擎开发者社区9 小时前
当 AI 内容真假难辨,谁来为真实签名 —— 证书中心 C2PA 内容可信溯源服务正式发布
人工智能