RotatedRect类转换成Rect类

RotatedRect类转换成Rect类

RotatedRect该类表示平面上的旋转矩形,包含以下三个部分的参数:1、矩形中心点(质心)2、矩形边长(长和宽)3、旋转角度(在opencv中,坐标的原点在左上角,与x轴平行的方向为角度为0,逆时针旋转角度为负,顺时针旋转角度为正。角度是水平轴(x轴)顺时针旋转,与碰到的第一个边的夹角度数。而opencv默认把这个边的边长作为height。)
由于RotatedRect带了旋转角度的参数,所以没有直接转成不带角度的Rect类。因此需要我们对图像做一个初步的预处理。一般的预处理流程如下:二值化区域分割—角度矩阵计算—仿射变化。
预处理代码如下:

	Mat src = imread("图片地址");
	Mat result,img_gray;
	if(src.empty()){
        cout << "图片没读到!" << endl;
		getchar();
        return -1;
	}
	cvtColor(src,img_gray,CV_BGR2GRAY);
	Mat thresh_img(src.size(),CV_8UC1);
	threshold(img_gray,thresh_img,230,255,THRESH_BINARY_INV);
	vector<vector<Point>> contours;
	findContours(thresh_img,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);//查找轮廓
	RotatedRect mr = minAreaRect(Mat(contours[0]));//最小外界矩形
	float angle=0;
	Size si = mr.size;
	//判断角度
	if(mr.size.width <= mr.size.height){
		angle = mr.angle + 90;
		int tm  = si.width;
		si.width = si.height;
		si.height = tm;
	}else{
		angle = mr.angle;
	}
	Mat rotmat = getRotationMatrix2D(mr.center,angle,1);
	Mat deal_img;
	warpAffine(src,deal_img,rotmat,src.size());

实现效果如下:
原始图片:
原始图片仿射变化后图片:
仿射变化后图片然后再依据仿射变化后的坐标,进行ROI操作。
用Rect绘制矩形ROI即可。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值