图像切割、尺寸调整、旋转、透视图像处理的基本操作。
Rect rect = new Rect(x, y, width, height); // x, y 起始坐标width, height 切割宽高。
参数。 | 说明。 |
pt1。 | 起始坐标x。 |
pt2。 | 开始坐标y。 |
width。 | 终点坐标。 |
height。 | 直线颜色。 |
// 读取原始图像Mat image = new Mat("1.png", ImreadModes.Color);// 设置感兴趣区域的坐标和尺寸Rect roi = new Rect(100, 100, 200, 200);//坐标 x,y 尺寸 长宽// 切割图像Mat croppedImage = new Mat(image, roi);// CV2显示图片.ImShow("image", image);Cv2.ImShow("croppedImage", croppedImage);
Cv2.Resize(src,OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR );
参数。 | Cv2.Resize(src,OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR ); |
参数。 | 解释。 |
src。 | 输入,原图像,要改变图像的大小。 |
dst。 |
|
fx:width方向的缩放比,如果是0,c;然后它就会遵循(double)dsize.width/src.cols计算; | fy:height方向的缩放比,如果是0,c;然后它就会遵循(double)dsize.height/src.计算rows;
|
INTER_AREA -区域插值 resampling using pixel area relation. It may be a preferred method for image decimation, as it gives moire’-free results. But when the image is zoomed, it is similar to the INTER_NEAREST method.。
右旋转90° Cv2.Rotate(src, dst, RotateFlags.Rotate90clockwise;
旋转180° Cv2.Rotate(src, dst, RotateFlags.Rotate180);
垂直翻转 Cv2.Flip(src, dst, FlipMode.Y);
CV2水平翻转.Flip(src, dst, FlipMode.X);
using OpenCvSharp;using System;class Program{ static void Main() { Mat src = new Mat("input.jpg", ImreadModes.Color); Mat dst = new Mat(); Cv2.Rotate(src, dst, RotateFlags.Rotate90Clockwise); Cv2.ImShow("dst", dst); Cv2.WaitKey(0); }}。
6.旋转任何角度。
6.任意角度旋转
Cv2.WarpAffine(。
InputArray src, // 输入图像。
OutputArray dst, // 输出图像。
InputArray M, // 旋转矩阵。
Size dsize, // 输出图像大小。 | |
int flags = INTER_LINEAR, // 像素插值模式。 | int borderMode = BORDER_CONSTANT, // 默认情况下,背景填充是常量。 |
const Scalar & borderValue = Scalar() // 默认情况下,填充颜色为黑色。 | )。 |
说明。 | src。 |
输入图像。 | dst。 |
输出图像。 | M。 |
旋转矩阵。 | dsize。 |
输出图像大小。 | flags。 |
像素插值模式。
borderMode。
默认情况下,背景填充是常量。
const Scalar。
默认情况下,填充颜色为黑色。
using OpenCvSharp;Mat img = new Mat("1.png", ImreadModes.Grayscale);Point2f center = new Point2f(img.Cols / 2f, img.Rows / 2f);//使用CV2.GetrotationMatrix2D()函数构建旋转矩阵,然后使用CV2.WarpAffine()仿射转换函数。Mat matrix = Cv2.GetrotationMatrix2D(center, 45, 0.6);Cv2.WarpAffine(img, img, matrix, img.Size());Cv2.ImShow("img", img);Cv2.WaitKey(0);Cv2.DestroyAllWindows();
7.图像透视。
Cv2.GetAffineTransform(srcPoints, dstPoints);
参数。
Cv2.GetAffineTransform(srcPoints, dstPoints);
src: 三点坐标代表图像输入, 形成:[[col_1, row_1], [col_2, row_2], [col_3, row_3]]。
dst: 三点坐标代表输出图像, 形成:[[col_4, row_4], [col_5, row_5], [col_6, row_6]]。
点1 由位置 [col_1, row_1] 移动到 [col_4, row_4]。
点2 由位置 [col_2, row_2] 移动到 [col_5, row_5]。
点3 由位置 [col_3, row_3] 移动到 [col_6, row_6]。
using OpenCvSharp;Mat src = new Mat("input.jpg", ImreadModes.Color);Mat dst = new Mat();Point2f[] srcPoints = new Point2f[]{ new Point2f(0, 0), new Point2f(src.Cols, 0), new Point2f(0, src.Rows)};Point2f[] dstPoints = new Point2f[]{ new Point2f(src.Cols * 0.0f, src.Rows * 0.33f), new Point2f(src.Cols * 0.85f, src.Rows * 0.25f), new Point2f(src.Cols * 0.15f, src.Rows * 0.7f)};Mat affineMatrix = Cv2.GetAffineTransform(srcPoints, dstPoints);Cv2.WarpAffine(src, dst, affineMatrix, src.Size());Cv2.ImShow("src", src);Cv2.ImShow("dst", dst);Cv2.WaitKey();
c# OpenCV相关文章目录。
c# Opencvsharp安装(一)
c# 读取OpenCvsharp,显示和写入图像(二)
c# 切割OpenCvsharp图像,调整大小,旋转,透视(三)