【7】OpenCV实现图片任意角度的旋转变换

 利用仿射变换函数进行图像的旋转操作 只改变其旋转角度 而不进行仿射变换 旋转后的图片任然位于同原来图片的大小范围内 

实现代码如下: 

#include "pch.h"
#include <iostream>
#include<opencv2/opencv.hpp>
#include<opencv.hpp>

using namespace cv;
using namespace std;

Mat imagerot(Mat &src,  double rotangle);

int main()
{
	Mat src, dst,fianlly;
	Mat  rotMat(2, 3, CV_32FC1);
	src = imread("02.jpg");
	imshow("original_iamge", src);
	fianlly = imagerot(src,  45);
	imshow("fianlly_result", fianlly);
	waitKey(0);
	return 0;
}

Mat imagerot(Mat &src, double rotangle)
{
	Mat inputimage = src;
	Mat	outputimage = Mat::zeros(inputimage.size(), inputimage.type());//输出图像
	double input_clos = inputimage.cols;
	double input_rows = inputimage.rows;	
	Point center = Point(input_clos / 2, input_rows / 2);//旋转中心
	double angle = rotangle;//旋转角度

	/***************************************计算缩放比例*****************************************************/
	double distance1 = sqrt(input_clos*input_clos+ input_rows* input_rows);//求取对角线长度
	cout << "distance1=" <<setw(5)<<setprecision(3)<< distance1 << endl;
	double distance2=min(input_clos, input_rows);
	cout << "distance2=" << setw(5) <<setprecision(0) <<  distance2<< endl;
	double scale =  (distance2/ distance1);  //缩放因子
	cout << "distance3=" << setw(5) << setprecision(4) << scale << endl;
	cout << "缩放尺度" << setw(5)<< scale << endl;

	/***************************************获取变换矩阵进行变换*****************************************************/
	Mat  rotMat(2, 3, CV_32FC1);//定义初始变换矩阵 用于存储变化矩阵
	rotMat = getRotationMatrix2D(center, angle, scale);
	warpAffine(inputimage, outputimage, rotMat, outputimage.size());//图像旋转变换
	//imshow("rot_iamge", outputimage);
	return outputimage;
}

 效果图展示

                                    

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值