4/26调APRN过程

来源:互联网 发布:双语名著阅读软件 编辑:程序博客网 时间:2024/06/05 15:50
vector<vector<Point>>::iterator itc = contours.begin();vector<RotatedRect> rect;for(;itc != contours.end();){RotatedRect mr = minAreaRect(contours[164]);//啊啊啊,直接就把轮廓转换成mat,还是用没见过的方法if(!verifySizes(mr)){itc = contours.erase(itc);}else{rect.push_back(mr);itc++;}}

今天写这段代码的时候出不来想要的轮廓,但是调试也调试不出来,然后花了一个下午来解决

首先是我想给每一个轮廓标号,然后看车牌所在的轮廓是多少号

所以用到了如下的代码

for( int i = 0; i< contours.size(); i++ )     { drawContours( result, contours,164,Scalar(0,0,255) );  string str = to_string((_ULonglong)i);   Point point(contours[i][0].x,contours[i][0].y);  putText(result,str,point, FONT_HERSHEY_PLAIN, 1, Scalar(0,0,200));    }
之后我知道了想要的轮廓的下标

然后我想知道每一个轮廓的宽高比 ,有了下边这些代码

//找到每一个轮廓的宽高比RotatedRect m = minAreaRect(contours[164]);int height = m.size.width;int weight = m.size.height;float scale = weight/height;cout<<"height = "<<height<<endl<<"weight = "<<weight<<endl<<"scale = "<<scale<<endl;
我发现我想要的轮廓符合条件,但是就是画不出来

所以有了下面这行代码

RotatedRect mr = minAreaRect(contours[164]);
我将该轮廓直接作为参数传递给了minAreaRect()

然后进入下面的语句调试

RotatedRect mr = minAreaRect(contours[164]);//啊啊啊,直接就把轮廓转换成mat,还是用没见过的方法if(!verifySizes(mr)){itc = contours.erase(itc);}else{rect.push_back(mr);itc++;}

其中vector.erase的用法在另一片转载的博文

进入到verifySizes()里面

int area = mr.size.height * mr.size.width;float r = mr.size.width / mr.size.height;if(r<1) r = mr.size.height / mr.size.width;

我当时写的是

float r = mr.size.height / mr.size.width;
导致 编译器又定义了一个r  ,该变量的作用域是if语句块内

0 0
原创粉丝点击