摘要
在WinForms应用程序中使用C#和OpenCvSharp进行图片裁剪,可以创建一个简单的WinForms界面来实现这个功能。
Mat类:Mat 是OpenCvSharp中用于表示图像和矩阵的主要类。你可以使用它来加载、保存、裁剪和处理图像。
- Mat(string fileName):用于加载图像文件。
- SaveImage(string fileName):用于保存图像到文件。
- Rect:用于表示矩形区域。
- new Mat(Mat source, Rect roi):用于裁剪图像。
正文
nuget 安装 OpenCVSharp4
这里OpenCvSharp4.runtime.win 库需要引用,不然会报错
DllNotFoundException: Unable to load DLL 'OpenCvSharpExtern' or one of its dependencies
OpenCvSharp.Extensions 库
一个例子
private void btnCrop_Click(object sender, EventArgs e)
{
Mat sourceImage;
// 将Image对象转换为Mat对象
Mat matFromImage = BitmapConverter.ToMat(new Bitmap(pic.Image));
if(matFromImage!=null )
{
int x = 0;
int y = 0;
int width = 100;
int height = 100;
x =int.Parse( txtPostion.Text.Split(",")[0]);
y = int.Parse(txtPostion.Text.Split(",")[1]);
Rect cropRegion = new Rect(x, y, width, height);
Mat croppedImage = new Mat(matFromImage, cropRegion);
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "JPEG Image|*.jpg";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
croppedImage.SaveImage(saveFileDialog.FileName);
MessageBox.Show("裁剪完成并保存。");
}
croppedImage.Release();
}
}
截取图型区域
private void btnCrop_Click(object sender, EventArgs e)
{
Mat sourceImage = BitmapConverter.ToMat(new Bitmap(pic.Image));
//创建一个与原始图像相同大小的黑色图像,这将作为我们的圆形掩码
Mat mask = new Mat(sourceImage.Size(), MatType.CV_8U, new Scalar(0));
//在掩码上绘制一个白色的圆形:
OpenCvSharp.Point center = new OpenCvSharp.Point(mask.Cols / 2, mask.Rows / 2); // 圆心坐标
int radius = Math.Min(mask.Cols, mask.Rows) / 2; // 半径,取图像宽度和高度的最小值的一半
Cv2.Circle(mask, center, radius, Scalar.White, -1); // -1 表示填充圆形
Mat result = new Mat();
sourceImage.CopyTo(result, mask);
//将Mat转换为Image
Bitmap bitmap = BitmapConverter.ToBitmap(result);
pictureBox1.Image= bitmap;
}