目录

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 图像翻转

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
www_pp_3 小时前
# 基于 OpenCV 的人脸识别实战:从基础到进阶
人工智能·opencv·计算机视觉
蹦蹦跳跳真可爱5894 小时前
Python----计算机视觉处理(Opencv:道路检测之车道线拟合)
开发语言·人工智能·python·opencv·计算机视觉
leo03085 小时前
详解相机的内参和外参,以及内外参的标定方法
计算机视觉·机器人·相机标定
知来者逆6 小时前
计算机视觉——为什么 mAP 是目标检测的黄金标准
图像处理·人工智能·深度学习·目标检测·计算机视觉
MobiCetus6 小时前
Deep Reinforcement Learning for Robotics翻译解读2
人工智能·深度学习·神经网络·机器学习·生成对抗网络·计算机视觉·数据挖掘
新知图书7 小时前
OpenCV销毁窗口
人工智能·opencv·计算机视觉
大熊背10 小时前
颜色归一化操作
人工智能·计算机视觉
乙酸氧铍11 小时前
OpenCV 实现对形似宝马标的黄黑四象限标定位
人工智能·python·opencv·计算机视觉·光学定位·光学识别·四象限标
jndingxin11 小时前
OpenCV 图形API(13)用于执行两个矩阵(或图像)逐元素乘法操作的函数mul()
人工智能·opencv
JinYoMo15 小时前
【手把手教你从零开始YOLOv8-入门篇】YOLOv8 数据集构建
算法·机器学习·计算机视觉