opencvsharp Mat图片复制出小旋转矩形的图片
时间: 2023-08-24 11:13:24 浏览: 152
可以使用OpenCVSharp中的函数cv::minAreaRect来获取包含图像中所有非零像素点的最小旋转矩形,然后再将其裁剪出来。
下面是一个示例代码,假设原始图像为matSrc,最小旋转矩形为rect:
```csharp
// 获取最小旋转矩形
RotatedRect rect = Cv2.MinAreaRect(matSrc);
// 获取旋转矩形四个顶点坐标
Point2f[] vertices = rect.Points();
// 将四个顶点坐标转换为整数坐标
Point[] intVertices = Array.ConvertAll(vertices, Point.Round);
// 计算旋转矩形的宽高
int width = (int)rect.Size.Width;
int height = (int)rect.Size.Height;
// 创建裁剪后的图像
Mat matDst = new Mat(height, width, matSrc.Type());
// 获取仿射变换矩阵
Mat rotMat = Cv2.GetAffineTransform(vertices, new Point2f[] { new Point2f(0, 0), new Point2f(width - 1, 0), new Point2f(0, height - 1) });
// 应用仿射变换
Cv2.WarpAffine(matSrc, matDst, rotMat, matDst.Size(), InterpolationFlags.Linear, BorderType.Constant);
// 显示裁剪后的图像
Cv2.ImShow("Crop Image", matDst);
```
这段代码会创建一个新的Mat对象matDst,对其进行裁剪后再进行旋转,最后显示裁剪后的图像。你可以根据需要修改代码以适应你的具体应用场景。
阅读全文