• 关于递归函数返回值的问题


    函数说明:这是需要将值返回给主函数的一个子函数。前面的表示通过某种方式得到一个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;
    }
  • 相关阅读:
    [算法]Rotate Array
    [java]Arrays.copyOf() VS System.arrayCopy()
    [java]注解
    [算法]String to Integer(atoi)
    微软2014校园招聘笔试题
    [算法]数组中未出现的最小正整数
    [算法]数组排序之后相邻数的最大差值
    [算法]求最短通路值
    [算法]数组的partition调整
    mac 解决安卓模拟器链接不上网络
  • 原文地址:https://www.cnblogs.com/Daringoo/p/4431449.html
Copyright © 2020-2023  润新知