opencv实现图像旋转(不被裁剪)

   当用opencv读取照片时,很多时候图像都是经过旋转90度后的,而opencv又没有直接给出旋转图像的函数
   函数1是用来旋转图像的函数(由于图像长与宽不相等,图像会被裁剪
   函数2在旋转90度后,图像不被裁剪(首先先将图像扩充为正方形,然后再旋转)

   函数1

void rotate(cv::Mat src, cv::Mat& dst, double angle)
{
	cv::Size src_sz = src.size();
	cv::Size dst_sz(src_sz.width, src_sz.height);
 
	cv::Point center = cv::Point(src.cols / 2, src.rows / 2);//旋转中心
	cv::Mat rot_mat = cv::getRotationMatrix2D(center, angle, 1.0);//获得仿射变换矩阵
 
	cv::warpAffine(src, dst, rot_mat, dst_sz);
}

   函数2

cv::Mat  rotate(cv::Mat src,  double angle)
{
	cv::Mat dst;//目标图像
	cv::Size src_sz = src.size();
	cv::Size src_ext_sz = src.size();
	src_ext_sz.height= src_ext_sz.width;
	Mat src_ext = Mat::zeros(src_ext_sz, CV_8UC3);;//扩充后的原图像

	cv::Mat tempRoi(src_ext,cv::Rect(0, (src_sz.width - src_sz.height)/2, src.cols, src.rows));
	src.copyTo(tempRoi);

	cv::Size dst_sz(src_ext_sz.width, src_ext_sz.height);
 
	cv::Point center = cv::Point(src_ext.cols / 2, src_ext.rows / 2);//旋转中心
	cv::Mat rot_mat = cv::getRotationMatrix2D(center, angle, 1.0);//获得仿射变换矩阵
 
	cv::warpAffine(src_ext, dst, rot_mat, dst_sz);
	return dst;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值