关于OpenCV中 CV_Assert() 的使用引起程序中止/崩溃问题

CV_Assert() 的作用是:若括号中的表达式值为 false ,则返回一个错误信息,并终止程序执行。

但是 CV_Assert()assert 不同,CV_Assert() 会通过异常抛出,所以如果使用 CV_Assert(),可以通过捕获异常而不是程序崩溃,而 assert 会直接导致程序崩溃。当然如果你没有捕获这个异常,也同样会引起崩溃。

参考文章:CV_Assert和assert的区别


简单通过代码测试一下:

首先是 assert 的使用:
如图所示,直接使用 assert 判定引发了程序的崩溃,也捕获不到异常。

然后直接使用 CV_Assert() 也是同样的效果,引起了程序的崩溃。
那么用异常捕获试一下:
程序是正常运行的,抛出的异常并没有引起程序的崩溃。

测试代码:

cpp 复制代码
#include <iostream>
#include <assert.h>
#include <exception>
#include "opencv2/highgui.hpp"
#include "opencv2/core/core.hpp"
#include <opencv2/core.hpp>
#include <ros/ros.h>

int main()
{
    int i = 0;
    while(1){
        // 1. assert
        // assert(1 > 2);

        // try {
        //     assert(1 > 2);
        // } catch (cv::Exception& e) {
        //     std::cout << e.what() << std::endl;
        // }

        // 2. CV_Assert
        // CV_Assert(1 > 2);

        try {
            CV_Assert(1 > 2);
        } catch (cv::Exception& e) {
            std::cout << e.what() << std::endl;
        }

        sleep(1);
        std::cout << i << std::endl;
        i ++;
    }
}
相关推荐
www_pp_7 分钟前
# 深入解析BERT自然语言处理框架:原理、结构与应用
人工智能·自然语言处理·bert
jndingxin16 分钟前
OpenCV CUDA模块图像过滤------用于创建一个最小值盒式滤波器(Minimum Box Filter)函数createBoxMinFilter()
人工智能·opencv·计算机视觉
Leinwin17 分钟前
借助Azure AI Foundry 如何打造语音交互新体验
人工智能·microsoft·azure
缘友一世1 小时前
PyTorch可视化工具——使用Visdom进行深度学习可视化
人工智能·pytorch·深度学习
liuyang-neu1 小时前
目标检测 Sparse DETR(2022)详细解读
人工智能·目标检测·目标跟踪
lilye661 小时前
精益数据分析(70/126):MVP迭代中的数据驱动决策与功能取舍
大数据·人工智能·数据分析
luofeiju1 小时前
摄像机模型
计算机视觉·3d视觉·多视图几何
chen_song_1 小时前
CUDA的设备,流处理器(Streams),核,线程块(threadblock),线程,网格(‌gridDim),块(block)和多gpu设备同步数据概念
c++·人工智能·计算机视觉·数据挖掘·cuda编程·并行化计算·并行化计算与cuda编程
科技宅说1 小时前
AI炒菜机器人+一酱成菜构建万店一味的“风味引擎”
人工智能·机器人
移远通信1 小时前
从机械应答到深度交互,移远通信如何让机器人“灵魂觉醒”?
人工智能