码迷,mamicode.com
首页 > 其他好文 > 详细

对图像的仿射变换

时间:2018-06-05 13:33:48      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:scale   nbsp   控制台   item   应用程序   image   线性   意思   直线   

仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间

线性变换包含了平移,缩放,旋转,镜像,斜切,正交投影,线性变换在几何上可能造成拉伸但是不会直线不会出现弯折。

在OpenCV里仿射变换通过一个2x3的矩阵来表示,前面两列表示旋转、缩放、斜切、镜像等,后面两列表示x,y方向平移

下面我们来通过仿射变换来实现图像的平移、缩放、旋转

平移:(向X轴方向平移100像素)

只平移的话,前面两列单位矩阵,后面一列数据(100,0)

技术分享图片

技术分享图片

 

 缩放:(x轴缩放0.3,y轴缩放0.5)

技术分享图片

技术分享图片

旋转:(顺时针旋转30度)

技术分享图片

 

技术分享图片

 代码如下:

// wrapaffine.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "opencv2/opencv.hpp"

// 显示平移
void showTranslate(cv::Mat&inputImage) {
	cv::Mat mat1 = (cv::Mat_<double>(2, 3) << 1, 0, 100, 0, 1, 0);
	cv::Mat destImg;
	cv::warpAffine(inputImage, destImg, mat1, cv::Size(inputImage.cols, inputImage.rows), cv::INTER_LINEAR, cv::BORDER_CONSTANT);
	cv::imshow("translate", destImg);
}
void showScale(cv::Mat&inputImage) {
	cv::Mat mat1 = (cv::Mat_<double>(2, 3) << 0.3, 0, 0, 0, 0.5, 0);
	cv::Mat destImg;
	cv::warpAffine(inputImage, destImg, mat1, cv::Size(inputImage.cols, inputImage.rows), cv::INTER_LINEAR, cv::BORDER_CONSTANT);
	cv::imshow("scale", destImg);
}
void showRotate(cv::Mat&inputImage) {

	float g3 = sqrt(3.0);// 根号3

	cv::Mat mat1 = (cv::Mat_<double>(2, 3) << g3/2.0, -1.0/2.0, 0, 1.0 / 2.0, g3 / 2.0, 0);
	cv::Mat destImg;
	cv::warpAffine(inputImage, destImg, mat1, cv::Size(inputImage.cols, inputImage.rows), cv::INTER_LINEAR, cv::BORDER_CONSTANT);
	cv::imshow("rotate", destImg);
}
int main()
{
	cv::Mat inputImage = cv::imread("test.png");
	cv::imshow("src", inputImage);

	 showTranslate(inputImage);
	 showScale(inputImage);
	showRotate(inputImage);
	cv::waitKey();
	cv::destroyAllWindows();
    return 0;
}

  注:OpenCV的cv::Mat是按行的顺序存储数据,意思就是技术分享图片这样一个缩放矩阵他的数据从上面一行0.3,0,0开始存储到第二行0,0.5,0来按顺序存放

对图像的仿射变换

标签:scale   nbsp   控制台   item   应用程序   image   线性   意思   直线   

原文地址:https://www.cnblogs.com/zzatp/p/9139173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!