图片的缩放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);