zoukankan      html  css  js  c++  java
  • 关于递归函数返回值的问题

    函数说明:这是需要将值返回给主函数的一个子函数。前面的表示通过某种方式得到一个lines向量,这个lines向量的size可以为0或者1。然后进行如下递归调用。我的想法是如果处理了1次后(此时times==1)若size仍然为0,则输出"由于图片原因没有检测出直线!角度无法矫正",并返回0.0

    但是结果是:

    可以输出语句,但不是返回0.0,而是返回了一个 1.#INF ,也就是除0异常。

    问题是我在times==1里设置了返回啊,为什么它还会执行下去呢?

    原因是:

    Cout输出时直接输出到了缓冲区也就是命令窗口,但是return 0.0是被返回给了递归函数angleDetect(Mat img)(而不是主函数),这个函数收到了返回值后就继续往下执行了,而很明显size此时还是为0,所以最后返回了一个除0异常。

    int times=0;
    double angleDetect(Mat img)
    {
        ...//可以得到一个lines值
        /*有可能检测不到直线,为避免除数为0*/
        double mean_theta=0.0;
        if (lines.size()==0)
        {
            if (times==1)
            {
                cout<<"由于图片原因没有检测出直线!角度无法矫正"<<endl;
                return 0.0;
            }
            Mat ele=getStructuringElement(MORPH_RECT,Size(2,2));
            dilate(img,img,ele);
            times++;
            angleDetect(img);//递归
            
        }
        mean_theta=mean_theta/lines.size();
        mean_theta=(float)(90.0-mean_theta*180/CV_PI);
        if (mean_theta<0)
        {
            if (mean_theta>-1.0)
            {
                mean_theta=0;
            }
        }
        
        return  mean_theta;
    }
  • 相关阅读:
    centos软件安装
    新手根据菜鸟教程安装docker,从No package docker-io available开始遇到的坑...
    性能基准测试:KVM大战Xen
    Netdata---Linux系统性能实时监控平台部署记录
    Linux Storage Stack Diagram存储堆栈图
    /proc目录下文件详解
    磁盘IO计算
    RPM包下载网址
    搜索框获取转移焦点事件
    用点击事件做红绿灯2
  • 原文地址:https://www.cnblogs.com/Daringoo/p/4431449.html
Copyright © 2011-2022 走看看