OpenCvSharp学习(十三):图片的几何变换

图片的缩放Cv2.Resize

函数原型:public static void Resize(InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0, InterpolationFlags interpolation = InterpolationFlags.Linear);
src:输入源图
dst:输出图
dsize:输出图像大小,当dsize为0时,计算公式为dsize = Size(round(fxsrc.cols),round(fysrc.rows)),dsize与fx和fy不能同时为0
fx:图片在X轴的缩放比例,如果为0,计算公式为(double)dsize.width/src.cols
fy:图片在Y轴的缩放比例,如果为0,计算公式为(double)dsize.height/src.rows
interpolation :差值法,枚举类型

 Mat mat = new Mat(@"I:\OpenCvSharp学习\4.jpg", ImreadModes.AnyColor);
            Mat mat1 = new Mat();
            Cv2.Resize(mat, mat1, new Size(), 0.5, 0.5);
            Window window1 = new Window("源图像1", WindowMode.AutoSize, mat);
            Window window2 = new Window("源图像2", WindowMode.AutoSize, mat1);
            Cv2.WaitKey(0);

在这里插入图片描述

图片旋转Cv2.Rotate

图片旋转有两种方法,
第一种利用Cv2.Rotate旋转固定的角度
函数原型:public static void Rotate(InputArray src, OutputArray dst, RotateFlags rotateCode);
src:输入图像
dst:输出图像
rotateCode:旋转方式,枚举类型

Mat mat = new Mat(@"I:\OpenCvSharp学习\4.jpg", ImreadModes.AnyColor);
            Window window1 = new Window("源图像1", WindowMode.Normal, mat);
            Cv2.Rotate(mat, mat, RotateFlags.Rotate90Counterclockwise);
            Window window2 = new Window("源图像2", WindowMode.Normal, mat);
            Cv2.WaitKey(0);

在这里插入图片描述
第二种利用仿射变换进行图片旋转
函数原型:public static void WarpAffine(InputArray src, OutputArray dst, InputArray m, Size dsize, InterpolationFlags flags = InterpolationFlags.Linear, BorderTypes borderMode = BorderTypes.Constant, Scalar? borderValue = null);
src:输入图像,
dst:输出图像
m:仿射变换矩阵
dsize:输出图像的大小
flags :差值方法,默认为INTER_LINEAR双线性插值。
其他的差值方法为
INTER_NEAREST=CV_INTER_NN, //!< 最邻近插值
INTER_LINEAR=CV_INTER_LINEAR, //!< 双线性插值
INTER_CUBIC=CV_INTER_CUBIC, //!<双三次插值
INTER_AREA=CV_INTER_AREA, //!< 基于面积插值
INTER_LANCZOS4=CV_INTER_LANCZOS4, //!< 8邻域兰索斯插值
BorderTypes:边界处理方法,默认为:int borderMode=BORDER_CONSTANT
borderValue :边界颜色
要实现图片旋转终点在于变换矩阵m,
**第一步:**计算二维旋转的仿射矩阵
CV2.GetRotationMatrix2D();
函数原型:
public static Mat GetRotationMatrix2D(Point2f center, double angle, double scale);
它会返回一个mat类型的矩阵
center:源图像中旋转的中心。
angle:角度
scale:各向同性比例因子

Mat mat = new Mat(@"I:\OpenCvSharp学习\4.jpg", ImreadModes.AnyColor);
            Mat mat1 = new Mat();
            Mat mat3 = new Mat();
            Window window1 = new Window("源图像1", WindowMode.Normal, mat);
            Cv2.Rotate(mat, mat1, RotateFlags.Rotate90Counterclockwise);
            Window window2 = new Window("源图像2", WindowMode.Normal, mat1);
            //利用仿射变换进行旋转
            Point2f point2F = new Point2f(mat.Cols/2,mat.Rows/2);
            Mat Mat=Cv2.GetRotationMatrix2D(point2F,45,1);
            Cv2.WarpAffine(mat, mat3,Mat,mat.Size());
            Window window3 = new Window("源图像3", WindowMode.Normal, mat3);
            Cv2.WaitKey(0);

在这里插入图片描述

转置矩阵;Transpose

函数原型:public static void Transpose(InputArray src, OutputArray dst);

 Mat mat = new Mat(@"I:\OpenCvSharp学习\4.jpg", ImreadModes.AnyColor);
            Window window = new Window("源图像", WindowMode.Normal, mat);
            Cv2.Transpose(mat, mat);
            Window window1 = new Window("源图像1", WindowMode.Normal, mat);
            Cv2.WaitKey(0);

在这里插入图片描述

翻转Flip

Mat mat = new Mat(@"I:\OpenCvSharp学习\4.jpg", ImreadModes.AnyColor);
            Window window = new Window("源图像", WindowMode.Normal, mat);
            
            Cv2.Flip(mat,mat,FlipMode.XY);
            Window window1 = new Window("源图像1", WindowMode.Normal, mat);
            Cv2.WaitKey(0);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值