【OpenCV3】图像旋转与平移——cv::warpAffine()详解

图像旋转和平移是图像处理中常用的一种操作,opencv2和opencv3中对图像的旋转和平移都是通过仿射变换函数cv::warpAffine()来实现的。


1、图像的旋转

图像的旋转具体实现分为两步:先根据旋转角度和旋转中心获取旋转矩阵;然后根据旋转矩阵进行仿射变换,即可实现任意角度和任意中心的旋转效果。旋转矩阵的形式如下:


其中,


具体代码如下:

	cv::Mat src = cv::imread("lenna.jpg");
	cv::Mat dst;

	//旋转角度
	double angle = 45;

	cv::Size src_sz = src.size();
	cv::Size dst_sz(src_sz.height, src_sz.width);
	int len = std::max(src.cols, src.rows);

	//指定旋转中心
	cv::Point2f center(len / 2., len / 2.);
	
	//获取旋转矩阵(2x3矩阵)
	cv::Mat rot_mat = cv::getRotationMatrix2D(center, angle, 1.0);

	//根据旋转矩阵进行仿射变换
	cv::warpAffine(src, dst, rot_mat, dst_sz);

	//显示旋转效果
	cv::imshow("image", src);
	cv::imshow("result", dst);

	cv::waitKey(0);

	return 0;


结果如下:



2、图像的平移

图像的平移也分为两步:首先定义好图像的平移矩阵,分别指定x方向和y方向上的平移量tx和ty,平移矩阵的形式如下:


具体代码如下:

	cv::Mat src = cv::imread("lenna.jpg");
	cv::Mat dst;

	cv::Size dst_sz = src.size();
	
	//定义平移矩阵
	cv::Mat t_mat =cv::Mat::zeros(2, 3, CV_32FC1);

	t_mat.at<float>(0, 0) = 1;
	t_mat.at<float>(0, 2) = 20; //水平平移量
	t_mat.at<float>(1, 1) = 1;
	t_mat.at<float>(1, 2) = 10; //竖直平移量

	//根据平移矩阵进行仿射变换
	cv::warpAffine(src, dst, t_mat, dst_sz);

	//显示平移效果
	cv::imshow("image", src);
	cv::imshow("result", dst);

	cv::waitKey(0);

	return 0;


平移结果如下:



2017.04.26

  • 21
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值