c# OpenCV 图像裁剪、调整大小、旋转、透视
作者:野牛程序员:2023-12-18 18:03:14C#阅读 2985
使用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

