标签:
函数说明:这是需要将值返回给主函数的一个子函数。前面的…表示通过某种方式得到一个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; }
标签:
原文地址:http://www.cnblogs.com/Daringoo/p/4431449.html