4/26调APRN过程

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语句块内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值