1. 项目概述
在计算机视觉和图像处理领域,基本几何图形和文字的绘制是最基础也是最重要的功能之一。Emgu CV作为OpenCV的.NET封装,为C#开发者提供了强大的图像处理能力。本文将详细介绍如何使用Emgu CV在图像上绘制直线、圆形、椭圆、矩形、多边形以及文字,这些操作在工业检测、医学影像、安防监控等领域都有广泛应用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 安装Emgu CV
首先需要通过NuGet安装Emgu CV包:
bash复制Install-Package Emgu.CV
Install-Package Emgu.CV.runtime.windows
注意:Emgu CV的版本需要与OpenCV的运行时版本匹配,建议使用最新的稳定版本。
2.2 创建基础图像
在开始绘制前,我们需要创建一个空白图像作为画布:
csharp复制// 创建一个800x600的黑色背景图像
Mat image = new Mat(600, 800, DepthType.Cv8U, 3);
image.SetTo(new MCvScalar(0, 0, 0));
3. 基本图形绘制方法
3.1 绘制直线
直线是最基本的图形元素,Emgu CV提供了CvInvoke.Line方法:
csharp复制// 绘制一条从(100,100)到(700,500)的红色直线,线宽3像素
CvInvoke.Line(
image,
new Point(100, 100),
new Point(700, 500),
new MCvScalar(0, 0, 255),
3
);
参数说明:
- 第一个参数:目标图像
- 第二、三个参数:起点和终点坐标
- 第四个参数:颜色(BGR格式)
- 第五个参数:线宽(像素)
3.2 绘制圆形
圆形绘制使用CvInvoke.Circle方法:
csharp复制// 在(400,300)处绘制半径为100的绿色实心圆
CvInvoke.Circle(
image,
new Point(400, 300),
100,
new MCvScalar(0, 255, 0),
-1 // -1表示填充
);
3.3 绘制椭圆
椭圆绘制相对复杂,使用CvInvoke.Ellipse方法:
csharp复制// 绘制一个中心在(400,300),长轴200,短轴100,旋转30度的蓝色椭圆
RotatedRect ellipse = new RotatedRect(
new PointF(400, 300),
new SizeF(200, 100),
30
);
CvInvoke.Ellipse(
image,
ellipse,
new MCvScalar(255, 0, 0),
2,
LineType.EightConnected
);
3.4 绘制矩形
矩形绘制有两种方式:普通矩形和旋转矩形。
3.4.1 普通矩形
csharp复制// 绘制从(200,200)到(600,400)的黄色矩形
Rectangle rect = new Rectangle(200, 200, 400, 200);
CvInvoke.Rectangle(
image,
rect,
new MCvScalar(0, 255, 255),
2
);
3.4.2 旋转矩形
csharp复制// 绘制中心在(400,300),大小300x200,旋转45度的青色矩形
RotatedRect rotatedRect = new RotatedRect(
new PointF(400, 300),
new SizeF(300, 200),
45
);
PointF[] vertices = rotatedRect.GetVertices();
for (int i = 0; i < 4; i++)
{
CvInvoke.Line(
image,
new Point((int)vertices[i].X, (int)vertices[i].Y),
