c# OpenCV 图像裁剪、调整大小、旋转、透视
作者:野牛程序员:2023-12-18 18:03:14C#阅读 2436
使用C#和OpenCV库,可以执行图像裁剪、调整大小、旋转和透视变换等操作。以下是一个简单的示例代码,演示如何使用Emgu.CV库(一个OpenCV的.NET封装)来执行这些操作
using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using System; using System.Drawing; class Program { static void Main() { // 读取图像 Mat inputImage = CvInvoke.Imread("input.jpg"); // 图像裁剪 Rectangle roi = new Rectangle(100, 100, 300, 200); Mat croppedImage = new Mat(inputImage, roi); // 调整大小 Size newSize = new Size(200, 150); Mat resizedImage = new Mat(); CvInvoke.Resize(inputImage, resizedImage, newSize); // 旋转图像 double angle = 30.0; Point center = new Point(inputImage.Width / 2, inputImage.Height / 2); Mat rotatedImage = new Mat(); Mat rotationMatrix = CvInvoke.GetRotationMatrix2D(center, angle, 1.0); CvInvoke.WarpAffine(inputImage, rotatedImage, rotationMatrix, inputImage.Size); // 透视变换 PointF[] srcPoints = new PointF[] { new PointF(100, 100), new PointF(300, 100), new PointF(300, 200), new PointF(100, 200) }; PointF[] dstPoints = new PointF[] { new PointF(150, 100), new PointF(250, 100), new PointF(300, 200), new PointF(100, 200) }; Mat perspectiveMatrix = CvInvoke.GetPerspectiveTransform(srcPoints, dstPoints); Mat perspectiveImage = new Mat(); CvInvoke.WarpPerspective(inputImage, perspectiveImage, perspectiveMatrix, inputImage.Size); // 在这里可以使用裁剪、调整大小、旋转、透视的结果进行其他操作 // 保存结果 CvInvoke.Imwrite("cropped_image.jpg", croppedImage); CvInvoke.Imwrite("resized_image.jpg", resizedImage); CvInvoke.Imwrite("rotated_image.jpg", rotatedImage); CvInvoke.Imwrite("perspective_image.jpg", perspectiveImage); } }
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892