opencv3计算变换矩阵getAffineTransform函数和进行仿射变换warpAffine函数_轩落_翼的博客-程序员秘密

技术标签: opencv学习之路  opencv  

#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>

using namespace cv;
using namespace std;

int main()
{
	Mat srcImage = imread("tiger.jpg");
	imshow("【原图】", srcImage);

	Mat dstImage;
	dstImage.create(srcImage.size(), srcImage.type());
	Mat MArray(2, 3, CV_32FC1);

	输入源三角形的三个点的坐标,和输出三角形的三个点的坐标,建立对应关系
	//Point2f srcPoint2f[3], dstPoint2f[3];
	//srcPoint2f[0] = Point2f(static_cast<float>(0), static_cast<float>(0));
	//srcPoint2f[1] = Point2f(static_cast<float>(srcImage.cols - 1), static_cast<float>(0));
	//srcPoint2f[2] = Point2f(static_cast<float>(0), static_cast<float>(srcImage.rows - 1));

	//dstPoint2f[0] = Point2f(static_cast<float>(0), static_cast<float>(srcImage.rows * 0.33));
	//dstPoint2f[1] = Point2f(static_cast<float>(srcImage.cols * 0.65), static_cast<float>(srcImage.rows * 0.35));
	//dstPoint2f[2] = Point2f(static_cast<float>(srcImage.cols * 0.15), static_cast<float>(srcImage.rows * 0.6));

	//输入源三角形的三个点的坐标,和输出三角形的三个点的坐标,建立对应关系
	Point2f srcPoint2f[3], dstPoint2f[3];
	srcPoint2f[0] = Point2f(static_cast<float>(0), static_cast<float>(0));
	srcPoint2f[1] = Point2f(static_cast<float>(0), static_cast<float>(3));
	srcPoint2f[2] = Point2f(static_cast<float>(3), static_cast<float>(0));

	dstPoint2f[0] = Point2f(static_cast<float>(0), static_cast<float>(3));
	dstPoint2f[1] = Point2f(static_cast<float>(3), static_cast<float>(5));
	dstPoint2f[2] = Point2f(static_cast<float>(5), static_cast<float>(3));

	//用getAffineTransform函数建立对应关系
	MArray = getAffineTransform(srcPoint2f, dstPoint2f);

	warpAffine(srcImage, dstImage, MArray, Size(srcImage.cols * 3, srcImage.rows * 3), 1, 0, Scalar(0));

	namedWindow("【进行仿射变换后】", 0);
	imshow("【进行仿射变换后】", dstImage);

	waitKey(0);

	return 0;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_23880193/article/details/49187327

智能推荐

SPI总线方式实现基于xpt2046的AD转换和PWM_spi转pwm_jmucvm的博客-程序员秘密

一、SPI总线传送数据和读取数据,AD转换实现读取电位器的值。XPT2046 时序图 SPI总线写数据,赋予DIN数据-&gt;上升沿写入void SPI_Write(uchar dat){uchar i;CLK = 0;for(i=0; i&lt;8; i++) { DIN = dat &gt;&gt; 7; //右移七位,最高位先写入 dat &lt;&lt;= 1;

stc15f104w模拟串口使用_weixin_30341735的博客-程序员秘密

stc15f104w单片机体积小,全8个引脚完全够一般的控制使用,最小系统也就是个电路滤波----加上一个47uf电容和一个103电容即可,但因为其是一个5V单片机,供电需要使用5V左右电源。 该款单片机视乎没有硬件串口,所以想要使用串口完成开发则应该使用软件模拟串口实现,其中P3.0为单片机RX,P3.1为单片机TX,下...

标注上下标的方法_iteye_3224的博客-程序员秘密

1)上标:编辑文字时,输入2^,然后选中2^,点a/b按键,即可。 (2)下标:编辑文字时,输入^2,然后选中^2,点a/b按键,即可。 (3)上下标:编辑文字时,输入2^2,然后选中2^2,点a/b按键,即可。 ...

arcgis 属性 python_ArcGIS遍历区域内要素的属性(python)_小木曾韭菜的博客-程序员秘密

importsysreload(sys)sys.setdefaultencoding('utf-8')#使用utf码,默认是ascii码importarcpypath="D:/GISData"arcpy.env.workspace=patharcpy.MakeFeatureLayer_management(path+"/YF/样方分布图.shp",'YF')#将样方导入图层,命名YF...

论文浅尝 - SIAM ICDM 2020 | 基于图时空网络的知识引导的诊断预测_开放知识图谱的博客-程序员秘密

论文笔记整理:吴锐,东南大学硕士。来源:SIAM ICDM 2020论文下载地址:https://epubs.siam.org/doi/abs/10.1137/1.97816119762...

通向大规模医疗知识图谱:万字详解天衍实验室知识图谱对齐技术_PaperWeekly的博客-程序员秘密

本期 AI Drive,由腾讯天衍实验室研究员-张子恒,详细解读天衍实验室知识图谱对齐技术。具体主题如下:为什么需要知识图谱对齐面向医疗领域知识的知识图谱对齐技术总结及未来展望什么是知识图...

随便推点

利用av_read_frame解码h264、mp4多媒体文件为yuv_liupenglove的博客-程序员秘密

1、解码在上一篇博客《利用av_parser_parser2函数,解码h264文件》中,只能解码h264文件为yuv,不能直接从mp4、avi等多媒体文件中直接解码yuv,本文不仅可以解码h264文件到yuv,而且也支持直接从mp4中提取视频并解码为yuv,相比上一篇博客中的方法更通用一些。2、解码流程解码mp4文件比解码h264多了一个步骤:从视频流(stream)中复制参数到解码器上下文(AVCodecContext)中,这是一个必须的步骤,解码h264此步骤可以省略。3、代码v

详解Java中的Object.getClass()方法_javaPie的博客-程序员秘密

详解Java中的Object.getClass()方法  详解Object.getClass()方法,这个方法的返回值是Class类型,Class c = obj.getClass(); 通过对象c,我们可以获取该对象的所有成员方法,每个成员方法都是一个Method对象;我们也可以获取该对象的所有成员变量,每个成员变量都是一个Field对象;同样的,我们也可以获取该对象的构造函数,构造函数则是...

少走弯路的十条忠告(转)_weixin_34356555的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

C语言-MSB/LSB大小端序_msb和lsb_风见波的博客-程序员秘密

一、MSB和LSB首先我们要理解什么是MSB和LSB。数据在计算机里面都是二进制存储的,二进制的最高位为MSB,最低位是LSB。MSB:Most Significant Bit(最高有效位),也就是最高位,最左侧的bit。LSB:Least Significant Bit(最低有效位),最低位,最右侧的bit。二、存储空间的高地址字节和低地址字节除了char之外,其他类型的变量空间基本上都有很多字节。int类型的变量空间为4...

JSTL c:If 标签 test多条件下 判断失效_ciftest两个条件_爱吃红烧鱼的博客-程序员秘密

正确写法&amp;lt;c:if test=&quot;${fn:containsIgnoreCase(showMenuFlag,'6') &amp;amp;&amp;amp; isFlag == '1'}&quot;&amp;gt;&amp;lt;/c:if&amp;gt;错误写法&amp;lt;c:if test=&quot;${fn:containsIgnoreCase(showMenuFlag,'6') &amp;amp;&amp;amp; isFlag == '1'}...

推荐文章

热门文章

相关标签