C# 使用OpenCV
OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。C#在上位机开发中比较常用,有些项目需要在上位机上加入一些机器视觉相关的功能,在下面简单介绍了C#中使用OpenCV库的方法。
安装OpenCV包
在管理NuGet包中,搜索OpenCvSharp4,安装三个包,OpenCV在Net平台的核心包OpencvSharp4
,windows平台运行包OpenCvSharp4.runtime.win
,扩展包OpenCvSharp4.Extensions
。
三个包的介绍:
OpencvSharp4
:.NET 的 OpenCV 包装器。 由于此包仅包含核心托管库,因此需要另一个适用于您操作系统的本机绑定包 (OpenCvSharp4.runtime.*)。OpenCvSharp4.runtime.win
:OpenCvSharp 的内部实现包,可在 UWP 以外的 Windows 上运行。OpenCvSharp4.Extensions
:OpenCvSharp GDI+ 扩展库。
注意:net framework需要4.8才能支持
图片操作
图片读入
使用Mat Cv2.ImRead(string fileName, ImreadModes flags = ImreadModes.Color)
读入图片
参数:
fileName
:图片路径
flags
:图片读入模式,默认Color(3 通道 BGR 彩色图像)
返回值:
Mat
类型:用于存储和操作图像像素数据
示例:
Mat image = Cv2.ImRead("image.jpg");
图片读入模式
ImreadModes
是指定加载图像的颜色和深度的枚举,他可选的类型如下:
[Flags]
public enum ImreadModes
{
//
// 摘要:
// 如果设置,则按原样返回加载的图像(带 alpha 通道,否则会被裁剪)。
Unchanged = -1,
//
// 摘要:
// 如果设置,总是将图像转换为单通道灰度图像。
Grayscale = 0x0,
//
// 摘要:
// 如果设置,总是将图像转换为 3 通道 BGR 彩色图像。
Color = 0x1,
//
// 摘要:
// 如果设置,当输入具有相应的深度时返回16位/32位图像,否则将其转换为8位。
AnyDepth = 0x2,
//
// 摘要:
// 如果设置,图像将以任何可能的颜色格式读取。
AnyColor = 0x4,
//
// 摘要:
// 如果设置,则使用 gdal 驱动程序加载图像。
LoadGdal = 0x8,
//
// 摘要:
// 如果设置,总是将图像转换为单通道灰度图像,图像尺寸缩小 1/2。
ReducedGrayscale2 = 0x10,
//
// 摘要:
// 如果设置,总是将图像转换为 3 通道 BGR 彩色图像并且图像尺寸减小 1/2。
ReducedColor2 = 0x11,
//
// 摘要:
// 如果设置,总是将图像转换为单通道灰度图像,图像尺寸缩小 1/4。
ReducedGrayscale4 = 0x20,
//
// 摘要:
// 如果设置,总是将图像转换为 3 通道 BGR 彩色图像并且图像尺寸缩小 1/4。
ReducedColor4 = 0x21,
//
// 摘要:
// 如果设置,总是将图像转换为单通道灰度图像,图像尺寸缩小 1/8。
ReducedGrayscale8 = 0x40,
//
// 摘要:
// 如果设置,总是将图像转换为 3 通道 BGR 彩色图像并且图像尺寸减小 1/8。
ReducedColor8 = 0x41,
//
// 摘要:
// 如果设置,则不根据 EXIF 的方向标志旋转图像。
IgnoreOrientation = 0x80
}
图像显示
- 在新的窗口中显示图像
使用Cv2.ImShow(string winName, Mat mat)
打开一个窗口显示图像
winName
:窗体名称
mat
:Mat类,存储的图像数据
- 关闭图像
Cv2.DestroyWindow(string winName)
关闭对应的图像窗口
winName
:要关闭的窗体名称
3.关闭所有图像窗口
Cv2.DestroyAllWindows()
关闭所有显示图像的窗口
图像写入
使用Cv2.ImWrite(string fileName, Mat img, int[]? prms = null)
进行写入
fileName
:文件名
img
:写入的文件对象,Mat类型