warpAffine函数旋转、仿射变换保持完整图片

本文详细介绍了使用OpenCV进行图像旋转的方法,并确保旋转后的图像能够完整显示,避免裁剪。通过定义旋转中心、角度和尺度,获取旋转矩阵,并调整变换矩阵以适应新的图像边界。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.csdn.net/u013105205/article/details/78826789 这篇博客讲的非常清楚(转载自该博客)

对其中最后可展现完整的代码做简单记录(该代码也摘自上边链接的最后一段代码):

Mat img = imread(IMG_PATH);//读入图像

//定义仿射变换的中心、角度、尺度
center=Point2f(img.cols / 2.0, img.rows / 2.0);//原文说要获得完整结果图像,这里变换之前的中心必须为原图的中心
degree=-7;
scale=1;

//获得变换矩阵
rot = getRotationMatrix2D(center, degree, scale);
Mat rimg;
warpAffine(img, rimg, rot, img.size());

// 获取变换之后的 区域,这个很重要,不然的话,变换之后的图像显示不全
Rect bbox;
bbox = RotatedRect(center, Size(scale*img.cols, scale*img.rows), degree).boundingRect();

// 对变换矩阵的最后一列做修改,重新定义变换的 中心
rot.at<double>(0, 2) += bbox.width / 2 - center.x;
rot.at<double>(1, 2) += bbox.height / 2 - center.y;

Mat dst;
warpAffine(img, dst, rot, bbox.size());//此时的dst就是可以显示完整的图像了
imshow("dst", dst);
waitKey(0);

记录内容如有不妥之处,还望指出!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值