EmguCV学习笔记 VB.Net 5.1 基本变换

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。

教程VB.net版本请访问: EmguCV学习笔记 VB.Net 目录-CSDN博客

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

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

教程配套文件及相关说明以及如何获得pdf教程和代码,请移步: EmguCV学习笔记

学习VB.Net知识,请移步: vb.net 教程 目录_vb中如何用datagridview-CSDN博客

学习C#知识,请移步: C# 教程 目录_c#教程目录-CSDN博客

5.1 基本变换

5.1.1图像拼接

1、Vconcat方法用于将两个或多个Mat沿垂直拼接成一个大的Mat。常用声明如下:

Public Shared Sub VConcat(src1 As Emgu.CV.IInputArray, src2 As Emgu.CV.IInputArray, dst As Emgu.CV.IOutputArray)

参数说明:

  1. src1:输入的第一个Mat图像。
  2. src2:输入的第二个Mat图像,需要和第一个图像具有相同的列数和类型。
  3. dst:输出的Mat,用于存储拼接后的结果。

2、Hconcat方法用于将两个或多个Mat沿水平方向拼接成一个大的Mat。常用声明如下:

Public Shared Sub HConcat(src1 As Emgu.CV.IInputArray, src2 As Emgu.CV.IInputArray, dst As Emgu.CV.IOutputArray)

参数请参考Vconcat方法参数。

【代码位置:frmChapter5】Button1_Click

'图像拼接:Vconcat、hconcat

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim m1 As New Mat("C:\learnEmgucv\topleft.jpg", ImreadModes.Color)

Dim m2 As New Mat("C:\learnEmgucv\topright.jpg", ImreadModes.Color)

Dim m3 As New Mat("C:\learnEmgucv\bottomleft.jpg", ImreadModes.Color)

Dim m4 As New Mat("C:\learnEmgucv\bottomright.jpg", ImreadModes.Color)

'上下拼接

Dim dst1 As New Mat

CvInvoke.VConcat(m1, m2, dst1)

ImageBox1.Image = dst1

'上下拼接

Dim dst2 As New Mat

CvInvoke.VConcat(m3, m4, dst2)

ImageBox2.Image = dst2

'左右拼接

Dim dst3 As New Mat

CvInvoke.HConcat(dst1, dst2, dst3)

ImageBox3.Image = dst3

End Sub

运行后如下图所示:

图5-1 图像拼接

3、Stiche类一个图像拼接的工具,可以将多张图像拼接成一张大的全景图像。该类的主要方法为Stitch方法,可以接受多张输入图像并返回拼接后的图像。

【代码位置:frmChapter5】Button2_Click

'Stitcher类进行拼接

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

Dim sc As New Stitcher()

'这里选择3个图像进行拼接

Dim msrc(2) As Mat

Dim images As New VectorOfMat

For i As Integer = 0 To 2

msrc(i) = New Mat("c:\learnEmgucv\" & i & ".jpg", ImreadModes.Color)

images.Push(msrc(i))

Next

Dim result As New Mat()

'拼接

Dim status As Stitcher.Status = sc.Stitch(images, result)

'如果状态为OK,那么成功

If status = Stitcher.Status.Ok Then

ImageBox1.Image = result

Else

Console.WriteLine("Stitching failed")

End If

End Sub

运行后如下图所示:

图5-2 拼接好后的图像

5.1.2 Rotate旋转

1、Rotate方法,声明如下:

Public Shared Sub Rotate(src As Emgu.CV.IInputArray, dst As Emgu.CV.IOutputArray, rotateCode As Emgu.CV.CvEnum.RotateFlags)

主要参数说明:

  1. rotateCode:支持90度倍数旋转,RotateFlags类型,包括Rotate90Clockwise(顺时针旋转90度)、Rotate90CounterClockwise(逆时针旋转90度)、Rotate180(旋转180度)。

2、Image类的Rotate方法。常用声明如下:

Public Function Rotate(angle As Double, background As TColor) As Emgu.CV.Image(Of TColor, TDepth)

  1. angle:旋转角度。
  2. background:旋转后填充的背景颜色。

【代码位置:frmChapter5】Button3_Click

'旋转

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

Dim m As New Mat("C:\learnEmgucv\lena.jpg", CvEnum.ImreadModes.AnyColor)

'支持90度倍数旋转

Dim mdst As New Mat

CvInvoke.Rotate(m, mdst, RotateFlags.Rotate90CounterClockwise)

ImageBox1.Image = mdst

Dim img As New Image(Of Bgr, Byte)("C:\learnEmgucv\lena.jpg")

Dim imgdst As Image(Of Bgr, Byte)

'旋转角度

Dim theta As Double = 30

imgdst = img.Rotate(theta, New Bgr(255, 0, 0))

ImageBox2.Image = imgdst

End Sub

运行后如下图所示:

图5-3 图像旋转

5.1.3 缩放

1、Resize可以将给定输入图像缩放为指定大小的输出图像。声明如下:

Public Shared Sub Resize(src As Emgu.CV.IInputArray, dst As Emgu.CV.IOutputArray, dsize As System.Drawing.Size, Optional fx As Double = 0, Optional fy As Double = 0, Optional interpolation As Emgu.CV.CvEnum.Inter = 1)

参数说明:

  1. dsize表示输出图像的大小。
  2. fx和fy表示x方向和y方向缩放因子。
  3. interpolation表示插值方法。这是Inter类型,主要成员有:
    1. Linear:线性插值算法。
    2. CUBIC:三次样条插值算法。
    3. AREA:区域插值算法

使用Resize函数时,可以通过设置dsize参数来指定输出图像的大小,也可以通过设置fx和fy参数来指定缩放因子。当dsize和fx/fy同时指定时,Resize函数会使用dsize指定的大小进行缩放,并忽略fx和fy参数。当只设置fx或fy参数时,Resize函数会按比例缩放图像,输出图像的大小为输入图像大小乘以对应的缩放因子。

【代码位置:frmChapter5】Button4_Click

'Resize

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

Dim msrc As New Mat("C:\learnEmgucv\lena.jpg", CvEnum.ImreadModes.Color)

ImageBox1.Image = msrc

Dim smallm As New Mat

'将源图像缩小到1/8

CvInvoke.Resize(msrc, smallm, New Drawing.Size(msrc.Width / 8, msrc.Height / 8))

ImageBox2.Image = smallm

Dim bigm As New Mat

'将小图像放大8倍

CvInvoke.Resize(smallm, bigm, New Drawing.Size(smallm.Width * 8, smallm.Height * 8), 0, 0, Inter.Cubic)

ImageBox3.Image = bigm

End Sub

运行后如下图所示:

图5-4 图像缩小后再放大

2、PyrDown和PyrUp

PyrDown将给定图像进行降采样,生成一个大小为原图像的二分之一的输出图像。

PyrUp将给定输入图像进行上采样,生成一个大小为原图像的两倍的输出图像。

【代码位置:frmChapter5】Button5_Click

'PyrDown PyrUp

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click

Dim msrc As New Mat("C:\learnEmgucv\lena.jpg", CvEnum.ImreadModes.Color)

CvInvoke.Imshow("msrc", msrc)

Dim mPyrDown As New Mat

'缩小到1/2

CvInvoke.PyrDown(msrc, mPyrDown)

CvInvoke.Imshow("PyrDown", mPyrDown)

Dim mPyrUp As New Mat

'放大2倍

CvInvoke.PyrUp(msrc, mPyrUp)

CvInvoke.Imshow("PyrUp", mPyrUp)

End Sub

运行后如下图所示:

图5-5 图像缩放

5.1.4 翻转Flip

Flip方法可以对给定的输入图像进行水平、垂直或同时水平垂直翻转,生成一个翻转后的输出图像。该方法声明如下:

Public Shared Sub Flip(src As Emgu.CV.IInputArray, dst As Emgu.CV.IOutputArray, flipType As Emgu.CV.CvEnum.FlipType)

主要参数说明:

  1. flipType:翻转方式。这是一个FlipType枚举类型,包含以下成员:
    1. Horizontal:水平翻转
    2. Vertical:垂直翻转
    3. Both:同时水平垂直翻转

【代码位置:frmChapter5】Button6_Click

'图像翻转

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

Dim m1 As New Mat("C:\learnEmgucv\lena.jpg", CvEnum.ImreadModes.Color)

'垂直翻转

Dim dst1 As New Mat

CvInvoke.Flip(m1, dst1, FlipType.Vertical)

ImageBox1.Image = dst1

'水平翻转

Dim dst2 As New Mat

CvInvoke.Flip(m1, dst2, FlipType.Horizontal)

ImageBox2.Image = dst2

'同时水平垂直翻转

Dim dst3 As New Mat

CvInvoke.Flip(m1, dst3, FlipType.Both)

ImageBox3.Image = dst3

End Sub

运行后如下图所示:

图5-6 图像翻转

相关推荐
plmm烟酒僧3 分钟前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
AI小杨20 分钟前
【车道线检测】一、传统车道线检测:基于霍夫变换的车道线检测史诗级详细教程
人工智能·opencv·计算机视觉·霍夫变换·车道线检测
冷凝女子1 小时前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
撞南墙者3 小时前
OpenCV自学系列(1)——简介和GUI特征操作
人工智能·opencv·计算机视觉
王哈哈^_^3 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
柳鲲鹏4 小时前
OpenCV视频防抖源码及编译脚本
人工智能·opencv·计算机视觉
jndingxin4 小时前
OpenCV视觉分析之目标跟踪(8)目标跟踪函数CamShift()使用
人工智能·opencv·目标跟踪
浮生如梦_9 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
深度学习lover9 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
Eric.Lee202114 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉