1, 图片的缩放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);
2,图片旋转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);
3,转置矩阵;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);
4,翻转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);