opencv 图像翻转旋转

合集下载

python中opencv的旋转方法

python中opencv的旋转方法

一、介绍OpenCV库OpenCV是一个开源的计算机视觉库,它提供了一系列用于图像处理和计算机视觉的工具和函数。

OpenCV是基于BSD许可(Berkeley Software Distribution license)发行的,因此它可以免费用于商业和研究目的。

二、 Python中的OpenCVPython是一种简单而强大的编程语言,它在科学计算和图像处理领域得到了广泛的应用。

在Python中使用OpenCV库,可以方便快捷地进行图像处理和计算机视觉任务。

OpenCV库提供了丰富的API,可以用于图像处理、特征检测、对象识别等方面。

三、旋转图像的需求在图像处理中,有时需要对图像进行旋转操作,以便实现图像的矫正、校准或者特定角度的展示。

在Python中,可以利用OpenCV库实现图像的旋转操作。

四、旋转图像的方法在Python中,使用OpenCV库可以轻松实现图像的旋转操作。

下面介绍两种常用的旋转方法:1. 旋转函数在OpenCV中,可以使用getRotationMatrix2D()和warpAffine()两个函数来实现图像的旋转操作。

具体步骤如下:1)使用getRotationMatrix2D()函数来获取旋转矩阵。

该函数接受三个参数,分别为旋转中心点、旋转角度和缩放比例。

可以使用如下代码获取旋转矩阵:```center = (image.shape[1] / 2, image.shape[0] / 2)angle = 45scale = 1.0M = cv2.getRotationMatrix2D(center, angle, scale)```2)使用warpAffine()函数来进行图像的旋转。

该函数接受三个参数,分别为原始图像、旋转矩阵和输出图像大小。

可以使用如下代码进行图像的旋转:```rotated = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))```通过以上两个步骤,就可以实现图像的旋转操作。

opencv翻转函数

opencv翻转函数

opencv翻转函数在OpenCV中,有3种不同的翻转函数:cv::flip()、cv::transpose()和cv::rotate()。

它们分别用于沿水平/垂直/对角线轴翻转矩阵、转置矩阵和旋转矩阵。

1. cv::flip()函数:。

该函数有3个参数:source(要翻转的矩阵)、dst(输出矩阵)和flipCode(用于指定要执行的操作)。

flipCode参数有3种不同的值:。

- flipCode = 0:沿x轴(垂直翻转)。

- flipCode > 0:沿y轴(水平翻转)。

- flipCode < 0:沿x轴和y轴(垂直和水平翻转)。

以下是一个使用cv::flip()翻转图像的示例:。

```。

cv::Mat src = cv::imread("input.jpg");。

cv::Mat dst;。

cv::flip(src, dst, 0); // 垂直翻转。

cv::imshow("Output", dst);。

cv::waitKey();。

```。

2. cv::transpose()函数:。

该函数用于矩阵转置,即交换行和列。

该函数只有1个参数:source (要转置的矩阵)。

以下是一个使用cv::transpose()转置矩阵的示例:。

```。

cv::Mat src = cv::Mat::eye(3, 3, CV_32FC1); // 生成一个3x3的单位矩阵。

cv::Mat dst;。

cv::transpose(src, dst); // 转置。

std::cout << src << std::endl << std::endl << dst << std::endl; // 输出源矩阵和目标矩阵。

```。

3. cv::rotate()函数:。

该函数用于对矩阵进行旋转。

它有4个参数:source(要旋转的矩阵)、dst(输出矩阵)、rotateCode(用于指定旋转方向)和rotateAngle(用于指定旋转角度)。

初学者福利!深度学习最常用的OpenCV操作——图像基本变换

初学者福利!深度学习最常用的OpenCV操作——图像基本变换

初学者福利!深度学习最常用的OpenCV操作——图像基本变换OpenCV使用之三:图像的颜色、大小和角度变换图像处理是深度学习最重要的应用领域之一。

OpenCV是深度学习图像处理的好帮手。

前文【链接】我们介绍了初学者福利!深度学习最常用的OpenCV操作。

今天,易学智能继续介绍OpenCV中另一类常用的操作——图像变换。

给定一张图像,我们可以进行多种方式的变换,最基本的就是颜色、大小和角度的变换。

一、图像颜色的抽取与组合图像由RGB(红、绿、蓝)三原色构成,一幅图像在OpenCV里也是使用一个三通道的数组来表示,按照默认方式读取的图像,其通道排列是按照BGR的顺序进行排列的,即第1个通道是绿色,第2个通道是绿色,第3个通道是红色,通过对不组合可以实现颜色的变换,变换方法及效果如图1所示。

图1:图像颜色的抽取与组合第6行:将一个图片拆分成BGR三个通道。

第8行:生成一个空白的通道。

如果仅有1个通道,在OpenCV 将显示为灰度图,如果要显示彩色的图片,则必须保持3个通道,因此需要生成一个空白的通道用来保证结果显示为彩色。

第10到12行:将图像不同通道的数据与空白通道数据进行组合,形成一个三通道的数据。

注意组合的顺序,b、g和r的数据必须分别放到第0、1和2的位置上。

Tips:· OpenCV将图像表示成numpy的数组,因此也可以使用numpy 的函数来操作图像,实现拆分和组合。

关于Numpy的安装使用,可参考易学智能的文章【链接】。

· 在OpenCV中是按照HWC的顺序进行数据,拆分和组合需要在最后一个维度上进行。

二、图像大小变换在真实环境下得到的图像大小往往是不固定的。

但是,大多数深度学习模型,对于输入大小是有要求的,因此需要将不同大小的输入图像统一到同一个尺寸,大小变换方法及效果如图2所示。

2:图片大小的绽放Tips:1、新的尺寸是按照先WH的顺序来定义,即先宽度后高度,这与图像大小HWC顺序要进行区别。

python-opencv-图像镜像翻转

python-opencv-图像镜像翻转

python-opencv-图像镜像翻转
图像镜像翻转的基本概念:
图像的镜像翻转指的是将图像以某条中轴线为中⼼进⾏镜像对换。

图像的镜像翻转根据翻转的⽅向可分为⽔平镜像翻转、垂直镜像翻转和对⾓镜像翻转3种。

⽔平镜像翻转指的是将图像的左右两部分以图像垂直中轴线为中⼼进⾏镜像对换。

垂直镜像翻转指的是将图像的上下两部分以图像⽔平中轴线为中⼼进⾏镜像对换。

对⾓镜像翻转指的将图像以图像⽔平中轴线和垂直中轴线的交点为中⼼进⾏镜像对换,也可以看做是以图像对⾓线为中⼼进⾏的镜像对换。

从上述描述中我们不难看出,图像的镜像翻转得到的图像与原图像构成的图像是⼀个轴对称图像。

import numpy as np
import cv2
img = cv2.imread("3.jpg")
cv2.imshow("yuan", img)
img1 = cv2.flip(img,1) #镜像
'''
参数2 必选参数。

⽤于指定镜像翻转的类型,其中0表⽰绕×轴正直翻转,即垂直镜像翻转;1表⽰绕y轴翻转,即⽔平镜像翻转;-1表⽰绕×轴、y轴两个轴翻转,即对⾓镜像翻转。

参数3 可选参数。

⽤于设置输出数组,即镜像翻转后的图像数据,默认为与输⼊图像数组⼤⼩和类型都相同的数组。

'''
cv2.imshow('dst',img1)
cv2.waitKey(0)
效果图:。

opencv如何实现图像旋转

opencv如何实现图像旋转

opencv 如何实现图像旋转
旋转一般是指将图像围绕某一指定点旋转一定的角度,图像旋转后会有一部分图像转出显示区域,可以截图那部分,也可以改变图像的尺寸使得图像显示完全。

图像旋转原理
所谓图像旋转是指图像以某一点为中心旋转一定的角度,形成一幅新的图像的过程。

这个点通常就是图像的中心。

由于是按照中心旋转,所以有这样一个属性:旋转前和旋转后的点离中心的位置不变。

根据这个属性,可以得到旋转后的点的坐标与原坐标的对应关系。

原图像的坐标一般是以左上角为原点的,我们先把坐标转换为以图像中心为原点。

假设原图像的宽为w,高为h,(x0,y0)为原坐标内的一点,转换坐标后的点为(x1,y1)。

可以得到:。

python-opencv图像几何变换--缩放、平移、旋转

python-opencv图像几何变换--缩放、平移、旋转

python-opencv图像⼏何变换--缩放、平移、旋转缩放缩放是调整图⽚的⼤⼩,可以指定输出图像尺⼨⼤⼩,也可以指定缩放⽐例。

opencv函数原型cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)InputArray src 输⼊图像OutputArrzy dst输出图像Size输出图像尺⼨fx, fy x轴,y轴的缩放系数interpolation插值⽅式interpolation插值⽅式:插值⽅式有INTER_NEAREST 最近邻插值、INTER_LINEAR 双线性插值、INTER_AREA 像素区域重采样、INTER_CUBIC 4*4像素邻域双三次插值、 INTER_LANCZOS4 8*8像素邻域Lanczos插值。

其中INTER_LINEAR为默认的插值⽅法,⾸选的插值⽅法是INTER_AREA。

我们可以使⽤以下⽅法调整图像⼤⼩:import cv2 as cvimg = cv.imread(r'Lena.png', 1)res1 = cv.resize(img, None, fx=0.5, fy=0.5, interpolation=cv.INTER_AREA)# Orheight, width = img.shape[ : 2]res2 = cv.resize(img, (int(0.5*width), int(0.5*height)), interpolation=cv.INTER_AREA)平移在对图像作平移操作时,需创建变换矩阵。

2⾏3列矩阵,决定了何种变换。

M矩阵则表⽰⽔平⽅向上平移为x⽽竖直⽅向上的平移距离为y。

import numpy as npimport cv2 as cvimg = cv.imread(r'Lena.png', 1)rows, cols, channels = img.shapeM = np.float32([[1,0,100],[0,1,50]])res = cv.warpAffine(img, M, (cols, rows))# cv.warpAffine()第三个参数为输出的图像⼤⼩,值得注意的是该参数形式为(width, height)。

opencv:图像的基本变换

opencv:图像的基本变换

opencv:图像的基本变换0.概述图像变换的基本原理都是找到原图和⽬标图的像素位置的映射关系,这个可以⽤坐标系来思考,在opencv中,图像的坐标系是从左上⾓开始(0,0),向右是x增加⽅向(cols),向下时y增加⽅向(rows)。

普通坐标关系:图像坐标关系:1.图像的平移图像的平移是⽐较简单的映射关系,对于原图像的某个像素点位置(X0,Y0),向右平移100个像素的话,变换之后的⽬标像素点位置(X =X0+100,Y),然后⽤原图像的像素值填充⽬标位置就可,因此我们需要将这种映射关系转换⼀下,⽅便获得原图像素值,也就是X0 = X-100,这⾥X是已知的。

具体代码如下:void translation(cv::Mat & src, cv::Mat & dst, int dx, int dy){const int rows = src.rows; // 获得原图的⾼度(y)const int cols = src.cols; // 获得原图的宽度(x)dst.create(rows, cols, src.type()); // 按照原图⼤⼩和格式创建⼀个空⽩图Vec3b *p;for (int Y = 0; Y < rows; ++Y) // 按⾏扫描{p = dst.ptr<Vec3b>(Y);for (int X = 0; X < cols; ++X){int X0 = X - dx; // 逆映射关系,求得原图的位置int Y0 = Y - dy;if (X0 >= 0 && Y0 >= 0 && X0 < cols && Y0 < rows) // 防⽌越界{p[X] = src.ptr<Vec3b>(Y0)[X0]; // 将原图的像素值赋给⽬标位置}}}}2.图像的缩放这⾥暂时只贴出opencv的缩放接⼝:void resize(InputArray src, //输⼊图像OutputArray dst, // 输出图像Size dsize, // 指定的输出图像的⼤⼩double fx=0, // 横向缩放⽐例double fy=0, // 纵向缩放⽐例int interpolation=INTER_LINEAR // 指定插值⽅式);3.图像的旋转图像旋转矩阵的原理可以参考基本映射关系:我们只需要根据这个映射关系写就好,其中的dx和dy主要⽤来计算旋转中⼼的,如果都是0的话图像就是围绕图像坐标(0,0)来旋转,该公式中的W'和H'指的是⽬标图像的宽度和⾼度。

如何利用opencv进行图形的旋转以及画出一个旋转的矩形

如何利用opencv进行图形的旋转以及画出一个旋转的矩形

如何利用opencv进行图形的旋转以及画出一个旋转的矩形如何利用opencv进行图形的旋转以及画出一个旋转的矩形testRotateRect.cpp : 定义控制台应用程序的入口点。

0203 #include "stdafx.h"04 #include "opencv2/opencv.hpp"05 using namespace std;06 using namespace cv;07 int _tmain(int argc, _TCHAR* argv[])08 {09 Mat image(200,200,CV_8UC3,Scalar(0));10 RotatedRect rRect=RotatedRect(Point2f(100,100),Size2f(100,50),30); 定义一个旋转矩形11 Point2f vertices[4];12 rRect.points(vertices);提取旋转矩形的四个角点13 for(int i=0;i<4;i++)14 {15 line(image,vertices[i],vertices[(i+1)%4],Scalar(0,255,0));四个角点连成线,最终形成旋转的矩形。

16 }17 Mat img=imread("d:/fff.jpg");18 imshow("ran",image);19 waitKey();20 return 0;21 }在进行图形的旋转变换时,旋转中心一定是原图形的一个顶点.______.(判断对错由旋转的含义可知:在进行图形的旋转变换时,旋转中心一定是原图形的一个顶点,说法错误;故答案为:×.如何画图形的旋转任意画一个三角形,然后任取一个角做旋转中心O,再找旋转中心O的对称点,用量角器在旋转中心O那一点量出题目要你量的度数!再画出来。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

opencv 图像翻转、旋转转自:/watkinsong/article/details/91896491.图像左右翻转、翻转90度opencv中并没有直接封装图像旋转任意角度的函数,一般我们可以使用仿射变换获得旋转后的图像,这时候可以进行任意角度的旋转,但是如果我们需要将图像旋转90度,例如只是对图像进行左右翻转,或者旋转90度将图像放倒,那么如果还使用仿射变换,显得有些不是很简单,有点过于复杂。

实际上可以使用求转置矩阵的方式将图像旋转90度,然后可以沿着指定的坐标轴对旋转后的图像进行翻转变化。

使用transpose(src, dst);对目标图像进行转置变换,可以将垂直的图像变为水平放置。

然后使用flip()函数对图像进行翻转。

整个过程非常简单,可以看下下面的代码就非常清晰的了解了。

// ImageFlip.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "opencv/cv.h"#include "opencv/highgui.h"#include "stdio.h"#include "iostream"using namespace cv;using namespace std;int _tmain(int argc, _TCHAR* argv[]) {Mat src = imread("lena.jpg");Mat dst;transpose(src, dst);Mat dst2;flip(dst, dst2, 1); // flip by y axis Mat dst3;flip(dst, dst3, 0); // flip by x axis Mat dst4;flip(dst, dst4, -1); // flip by both axises imshow("src", src);imshow("dst", dst);imshow("dst2", dst2);imshow("dst3", dst3);imshow("dst4", dst4); cvWaitKey();return 0;}实验结果:原始图像:转置以后:flip(dst, dst2, 1); // flip by y axis2、任意角度旋转、同时缩放(输出图像大小与输入图像大小相同,容易造成图像不全)下面这份代码用于实现对图像的缩放与旋转。

OpenCV版本:2.4.2// 图像旋转与缩放// Author:// Blog:/icvpr#include &lt;iostream&gt;#include &lt;vector&gt;#include &lt;opencv2/opencv.hpp&gt;int main(int argc, char** argv){cv::Mat image = cv::imread("../test.jpg");if (image.empty()){std::cout&lt;&lt;"read imagefailure"&lt;&lt;std::endl;return -1;}cv::Point2f center = cv::Point2f(image.cols / 2, image.rows / 2); // 旋转中心double angle = 30; // 旋转角度double scale = 0.5; // 缩放尺度cv::Mat rotateMat;rotateMat = cv::getRotationMatrix2D(center, angle, scale);cv::Mat rotateImg;cv::warpAffine(image, rotateImg, rotateMat, image.size());cv::imwrite("../rotate.jpg", rotateImg);return 0;} // 图像旋转与缩放// Author:// Blog:/icvpr #include&lt;iostream&gt;#include &lt;vector&gt;#include &lt;opencv2/opencv.hpp&gt;int main(int argc, char** argv){ cv::Mat image = cv::imread("../test.jpg");if (image.empty()){std::cout&lt;&lt;"read image failure"&lt;&lt;std::endl;return -1;} cv::Point2f center = cv::Point2f(image.cols / 2, image.rows / 2); // 旋转中心double angle = 30; // 旋转角度double scale = 0.5; // 缩放尺度cv::Mat rotateMat;rotateMat = cv::getRotationMatrix2D(center, angle, scale); cv::Mat rotateImg;cv::warpAffine(image, rotateImg, rotateMat,image.size()); cv::imwrite("../rotate.jpg", rotateImg);return 0;}原图:缩放:旋转:旋转+缩放3.图像旋转、缩放(缩放后图像完整的进行显示)旋转变换公式的推导:如下图,在2维坐标上,有一点p(x, y) , 直线op的长度为r, 直线op和x轴的正向的夹角为a。

直线op围绕原点做逆时针方向b度的旋转,到达p’(s,t) 则有s = r cos(a + b) = r cos(a)cos(b) – r sin(a)sin(b)(1.1)t = r sin(a + b) = r sin(a)cos(b) + r cos(a) sin(b) (1.2) 其中x =r cos(a) , y = r sin(a)代入(1.1), (1.2) ,s = x cos(b) – y sin(b)(1.3)t = x sin(b) + y cos(b) (1.4)用行列式表示如下用到的一些OpenCV中的函数:(1) CvMat*cv2DRotationMatrix(CvPoint2D32f center, double angle, doublescale, CvMat*map_matrix);Mat getRotationMatrix2D(Point2f center, doubleangle, double scale);说明:计算旋转加缩放的仿射矩阵参数:center:旋转中心angle:旋转度数,正值表示逆时针旋转。

scale:各方向同性的缩放尺度map_matrix:输出参数,仿射变换矩阵,浮点型2*3矩阵返回值:仿射变换矩阵注意:默认的变换是以相反的顺序进行的,即从目标到源。

对于目标图像中的任一点(x,y),先计算出它在源图像中的坐标,再将此点的像素值拷贝到目标图像中,所以计算出的变换矩阵是从目标到源的变换矩阵。

例如逆时针旋转30度,不做缩放,计算出的变换矩阵为:(2) void cvWarpAffine(const CvArr* src,CvArr* dst, const CvMat*map_matrix,intflags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar fillval=cvScalarAll(0));void warpAffine(InputArray src, OutputArray dst, InputArray M,Sizedsize, int flags=INTER_LINEAR,int borderMode = BORDER_CONSTANT,constScalar&amp; borderValue=Scalar() );说明:对图像做仿射变换参数:M:输入参数,2*3的仿射变换矩阵dsize:输出图像的尺寸flags:差值方法,若设置WARP_INVERSE_MAP标识,指明M是目的到源的变换。

borderMode:边界处理方法注意:当设置标志位WARP_INVERSE_MAP时,目标图像的计算公式为:否则,先调用invertAffineTransform()计算出M的逆仿射变换M’,然后将M’带入以上公式进行变换。

[cpp] viewplaincopy print?#include&lt;iostream&gt;#include&lt;opencv2/imgproc/imgproc.hpp&gt;#include&lt;opencv2/highgui/highgui.hpp&gt;using namespace std;using namespace cv;#define SCALE 0.5 //缩放比例int main(){Mat src = imread("pic3.png");Mat dst;//输出图像int angle = 30;//旋转角度(正值表示逆时针旋转)int length;//输出图像的宽度或高度//为了保证无论如何旋转都能放下,输出图像的长和宽都设为输入图像对角线长度乘以SCALE//但如果是缩小(SCALE&lt;=1),这样会导致临时图像中放不下原图,所以对于所有缩小的情况,输出图像和临时图像的长宽都设为原图的对角线长度if(SCALE &lt;= 1)length = sqrt(src.cols*src.cols +src.rows*src.rows);elselength = sqrt(src.cols*src.cols + src.rows*src.rows) * SCALE;//建立临时图像,长宽都是源图像的对角线长度,将源图像复制到临时图像的中心后再变换Mat tempImg(length,length,src.type());//临时图像,大小和输出图像一样大int ROI_x = length/2 - src.cols/2;//ROI矩形左上角的x 坐标int ROI_y = length/2 - src.rows/2;//ROI矩形左上角的y 坐标Rect ROIRect(ROI_x,ROI_y,src.cols,src.rows);//ROI 矩形Mat tempImgROI2(tempImg,ROIRect);//tempImg的中间部分src.copyTo(tempImgROI2);//将原图复制到tempImg的中心Point2f center(length/2,length/2);//旋转中心Mat M = getRotationMatrix2D(center,angle,SCALE);//计算旋转的仿射变换矩阵//输出看看算出的矩阵是什么cout&lt;&lt;"变换矩阵:"&lt;&lt;endl;cout&lt;&lt;M.at&lt;double&gt;(0,0)&lt;&lt;","&lt;&lt;M.at&lt;d ouble&gt;(0,1)&lt;&lt;","&lt;&lt;M.at&lt;double&gt;(0,2)&lt;&lt ;","&lt;&lt;endl;cout&lt;&lt;M.at&lt;double&gt;(1,0)&lt;&lt;","&lt;&lt;M.at&lt;double&gt;(1,1)&lt;&lt;","&lt;&lt;M.at&lt;double&gt;(1,2)&lt;&lt ;","&lt;&lt;endl;warpAffine(tempImg,dst,M,Size(length,length));//仿射变换//显示imshow("src",src);imshow("tempImg",tempImg);imshow("dst",dst);waitKey(0);return 0;} #include&lt;iostream&gt;#include&lt;opencv2/imgproc/imgproc.hpp&gt;#include&lt;opencv2/highgui/highgui.hpp&gt;using namespace std;using namespace cv;#define SCALE 0.5 //缩放比例int main(){Mat src = imread("pic3.png");Mat dst;//输出图像int angle = 30;//旋转角度(正值表示逆时针旋转) int length;//输出图像的宽度或高度//为了保证无论如何旋转都能放下,输出图像的长和宽都设为输入图像对角线长度乘以SCALE//但如果是缩小(SCALE&lt;=1),这样会导致临时图像中放不下原图,所以对于所有缩小的情况,输出图像和临时图像的长宽都设为原图的对角线长度if(SCALE &lt;= 1)length = sqrt(src.cols*src.cols +src.rows*src.rows);elselength = sqrt(src.cols*src.cols + src.rows*src.rows) * SCALE;//建立临时图像,长宽都是源图像的对角线长度,将源图像复制到临时图像的中心后再变换Mat tempImg(length,length,src.type());//临时图像,大小和输出图像一样大int ROI_x = length/2 - src.cols/2;//ROI矩形左上角的x 坐标int ROI_y = length/2 - src.rows/2;//ROI矩形左上角的y 坐标Rect ROIRect(ROI_x,ROI_y,src.cols,src.rows);//ROI矩形Mat tempImgROI2(tempImg,ROIRect);//tempImg的中间部分src.copyTo(tempImgROI2);//将原图复制到tempImg的中心Point2f center(length/2,length/2);//旋转中心Mat M = getRotationMatrix2D(center,angle,SCALE);//计算旋转的仿射变换矩阵//输出看看算出的矩阵是什么cout&lt;&lt;"变换矩阵:"&lt;&lt;endl;cout&lt;&lt;M.at&lt;double&gt;(0,0)&lt;&lt;","&lt;&lt;M.at&lt;d ouble&gt;(0,1)&lt;&lt;","&lt;&lt;M.at&lt;double&gt;(0,2)&lt;&lt ;","&lt;&lt;endl;cout&lt;&lt;M.at&lt;double&gt;(1,0)&lt;&lt;","&lt;&lt;M.at&lt;d ouble&gt;(1,1)&lt;&lt;","&lt;&lt;M.at&lt;double&gt;(1,2)&lt;&lt ;","&lt;&lt;endl;warpAffine(tempImg,dst,M,Size(length,length));//仿射变换//显示imshow("src",src);imshow("tempImg",tempImg);imshow("dst",dst); waitKey(0);return 0;}效果图:原图临时图像1结果1临时图像2结果2。

相关文档
最新文档