EmguCV学习笔记 VB.Net 3.6 旋转矩形

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
教程VB.net版本请访问:
EmguCV学习笔记 VB.Net 目录-CSDN博客

教程C#版本请访问: EmguCV学习笔记 C# 目录-CSDN博客

笔者的博客网址:https://blog.csdn.net/uruseibest

教程配套文件及相关说明以及如何获得pdf教程和代码(博客上的教程内容会和pdf教程一致,教程中也会包含所有代码),请移步:************************************************************EmguCV学习笔记****************************************************************

3.6 旋转矩形

RotatedRect结构表示一个旋转矩形,它由中心坐标、大小(长轴长度和短轴长度)和旋转角度三个属性组成。

以下是RotatedRect结构的定义:

Public Structure RotatedRect

Public Center As PointF

Public Size As SizeF

Public Angle As Single

End Structure

其中,各属性的含义如下:

  1. Center:旋转矩形的中心坐标,PointF类型。
  2. Size:旋转矩形的长轴长度和短轴长度,SizeF类型。
  3. Angle:旋转矩形的旋转角度,单位为度,Single类型。

RotatedRect结构还提供了一些方法,如GetVertices、GetBoundingRect等,可以方便地获取旋转矩形的顶点坐标、外接矩形等信息。

如果要绘制出旋转矩形,比较遗憾的是Cvinvoke没有提供直接的方法,但是可以通过RotatedRect的GetVertices先获得顶点坐标,再通过Polylines和FillPoly来绘制和填充。

【代码位置:frmChapter3】Button6_Click、PointFToPoint

'旋转矩形

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click

Dim mcs1 As New MCvScalar(0, 0, 255)

Dim mcs2 As New MCvScalar(0, 255, 0)

'旋转20度的旋转矩形

Dim rrec As New RotatedRect(New PointF(100, 200), New SizeF(80, 100), 20)

'获得4个顶点坐标

Dim pf() As PointF = rrec.GetVertices

'将PointF()转Point()

Dim p() As Point = Array.ConvertAll(pf, New Converter(Of PointF, Point)(AddressOf PointFToPoint))

'将Point()元素推入VectorOfPoint

Dim vp As New VectorOfPoint

vp.Push(p)

'绘制旋转矩形

CvInvoke.Polylines(mBg, vp, True, mcs1, 3)

'填充旋转矩形

CvInvoke.FillPoly(mBg, vp, mcs2)

ImageBox1.Image = mBg

End Sub

'将PointF转Point方法

Public Shared Function PointFToPoint(ByVal pf As PointF) As Point

Return New Point(CInt(pf.X), CInt(pf.Y))

End Function

运行后如下图所示:

图3-6 绘制、填充旋转矩形

大多数时候,我们获得的是PointF,也就是浮点坐标的Point。当遇到PointF需要转为Point的时候,可以使用以下代码:

Public Shared Function PointFToPoint(ByVal pf As PointF) As Point

Return New Point(CInt(pf.X), CInt(pf.Y))

End Function

如果是PointF数组转为Point数组,可以使用以下代码:

Dim p() As Point = Array.ConvertAll(pf, New Converter(Of PointF, Point)(AddressOf PointFToPoint))

这里使用了Array类的ConvertAll方法。

相关推荐
乐迪信息9 小时前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉
具身AGI15 小时前
模型懂物理吗?物理AI 物理推理 的新赛点
人工智能·深度学习·计算机视觉
天远Date Lab17 小时前
计算机视觉管道构建:基于天远身份证OCR实现机器学习身份信息提取
人工智能·机器学习·计算机视觉·ocr
hahaha601618 小时前
HLS高层次综合设计技巧--UART_TX接收模块设计案例
人工智能·算法·计算机视觉
格林威20 小时前
C#图像夜间识别率提升:使用OpenCvSharp和Halcon融合DeepSORT实现复杂场景下准确识别
开发语言·人工智能·数码相机·机器学习·计算机视觉·c#·视觉检测
AI的探索之旅21 小时前
97 个 OpenCV 实例(十九):视频写入,VideoWriter 与 FourCC 编码
人工智能·opencv·音视频
YOLO数据集集合21 小时前
票据字段检测数据集 | 票据检测 字段识别 财务自动化 目标检测 YOLO格式 深度学习数据集 计算机视觉9045期
目标检测·计算机视觉·自动化
ZhouDevin1 天前
算法论文/数据集3——CLD(TMLR2025)压缩训练集,仅保留对验证集有益的样本
人工智能·深度学习·算法·计算机视觉
飞Link2 天前
动作方法中的分割与过度分割方法全解析(含代码实战与踩坑案例)
人工智能·python·算法·计算机视觉
小王2042 天前
Day 32:DeepLab系列与语义分割进阶
深度学习·神经网络·计算机视觉