旋转,放大用以保证旋转不会造成图片切割

旋转时,有时容易造成旋转图片被切割掉一部份,所以需要一个放大到足以放下旋转后的图片的MAT进行保存。

通过角度算出最小尺寸,然后创建一个MAT,划出ROI,将srcImg 赋值给新建创的MAT完成区域放大,然后再进行旋转

double a = sin(angle), b = cos(angle);
int width = srcImg.size().width;
int height = srcImg.size().height;

保证原图可以任意角度旋转的最小尺寸  你以为及显示的位置
int tempLength = sqrt((double)width * width + (double)height *height) + 10;    //sqrt()开平方根
int tempX = (tempLength + 1) / 2 - width / 2;
int tempY = (tempLength + 1) / 2 - height / 2;

Mat RoiSrcImg(Size(tempLength, tempLength), srcImg.type());


cout << "size" << "= " << srcImg.size().width << "=" << tempLength << " " << tempLength << endl << "angle" << angle;

//将原图复制到临时图像tmp中心  
Mat ROI = RoiSrcImg(Rect(tempX, tempY, width, height));   //

srcImg.copyTo(ROI);
imshow("放大图1", RoiSrcImg);


旋转 注意CENTER 我改成了MAT的中心点

//创建一个旋转后的图像  
Mat RatationedImg(RoiSrcImg.rows, RoiSrcImg.cols, RoiSrcImg.type());

// RatationedImg.setTo(0);
//对RoiSrcImg进行旋转  
Point _center = Point(RoiSrcImg.rows / 2, RoiSrcImg.cols / 2);
Point2f center = _center; //中心点  


Mat M2 = getRotationMatrix2D(center, angle, 1);//计算旋转加缩放的变换矩阵 
warpAffine(RoiSrcImg, RatationedImg, M2, RoiSrcImg.size(), 1, 0, Scalar(0));//仿射变换 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值