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;
    }
  • 相关阅读:
    git 学习
    C语言 do while 语句
    C语言 计算班级平均成绩以及不及格的人数
    C语言 加减算法
    C语言 两个日期间的天数计算
    C语言 梯形面积
    C语言 while语句
    C语言 分段函数if else语句
    C语言 乘法运算
    C语言学习,for循环
  • 原文地址:https://www.cnblogs.com/Daringoo/p/4431449.html
Copyright © 2011-2022 走看看