1, 图片的缩放Cv2.Resize

  1. //函数原型:
  2. public static void Resize(InputArray src,
  3. OutputArray dst,
  4. Size dsize,
  5. double fx = 0,
  6. double fy = 0,
  7. 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 : 差值法,枚举类型

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

image.png

2,图片旋转Cv2.Rotate

图片旋转有两种方法,

第一种利用Cv2.Rotate旋转固定的角度

函数原型:

  1. public static void Rotate(InputArray src, OutputArray dst, RotateFlags rotateCode);

src: 输入图像
dst: 输出图像
rotateCode: 旋转方式,枚举类型

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

image.png

第二种利用仿射变换进行图片旋转

  1. //函数原型:
  2. public static void WarpAffine(InputArray src,
  3. OutputArray dst,
  4. InputArray m,
  5. Size dsize,
  6. InterpolationFlags flags = InterpolationFlags.Linear,
  7. BorderTypes borderMode = BorderTypes.Constant,
  8. Scalar? borderValue = null);
  9. //src:输入图像,
  10. //dst:输出图像
  11. //m:仿射变换矩阵
  12. //dsize:输出图像的大小
  13. //flags :差值方法,默认为INTER_LINEAR双线性插值。
  14. 其他的差值方法为
  15. INTER_NEAREST=CV_INTER_NN, //!< 最邻近插值
  16. INTER_LINEAR=CV_INTER_LINEAR, //!< 双线性插值
  17. INTER_CUBIC=CV_INTER_CUBIC, //!<双三次插值
  18. INTER_AREA=CV_INTER_AREA, //!< 基于面积插值
  19. INTER_LANCZOS4=CV_INTER_LANCZOS4, //!< 8邻域兰索斯插值
  20. //BorderTypes:边界处理方法,默认为:int borderMode=BORDER_CONSTANT
  21. //borderValue :边界颜色

要实现图片旋转终点在于变换矩阵m,
第一步:计算二维旋转的仿射矩阵
CV2.GetRotationMatrix2D();
函数原型:
public static Mat GetRotationMatrix2D(Point2f center, double angle, double scale);
它会返回一个mat类型的矩阵
center: 源图像中旋转的中心。
angle: 角度
scale: 各向同性比例因子

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

image.png

3,转置矩阵;Transpose

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

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

image.png

4,翻转Flip

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

image.png