C# 使用OpenCV基本图像操作功能

C# 使用OpenCV

OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。C#在上位机开发中比较常用,有些项目需要在上位机上加入一些机器视觉相关的功能,在下面简单介绍了C#中使用OpenCV库的方法。

安装OpenCV包

在管理NuGet包中,搜索OpenCvSharp4,安装三个包,OpenCV在Net平台的核心包OpencvSharp4,windows平台运行包OpenCvSharp4.runtime.win,扩展包OpenCvSharp4.Extensions

三个包的介绍:

  1. OpencvSharp4 :.NET 的 OpenCV 包装器。 由于此包仅包含核心托管库,因此需要另一个适用于您操作系统的本机绑定包 (OpenCvSharp4.runtime.*)。
  2. OpenCvSharp4.runtime.win:OpenCvSharp 的内部实现包,可在 UWP 以外的 Windows 上运行。
  3. OpenCvSharp4.Extensions :OpenCvSharp GDI+ 扩展库。
    在这里插入图片描述注意:net framework需要4.8才能支持
    在这里插入图片描述

图片操作

Mat类

Mat是OpenCV中一个非常重要的类,它用于存储和操作图像像素数据,图像读写和处理都要用到Mat类。

图片读入

使用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
    }

图像显示

  1. 在新的窗口中显示图像

使用Cv2.ImShow(string winName, Mat mat)打开一个窗口显示图像

winName:窗体名称

mat:Mat类,存储的图像数据

  Cv2.ImShow("test", mat);
  1. 关闭图像

Cv2.DestroyWindow(string winName)关闭对应的图像窗口

winName:要关闭的窗体名称

Cv2.DestroyWindow("test");

3.关闭所有图像窗口

Cv2.DestroyAllWindows() 关闭所有显示图像的窗口

 Cv2.DestroyAllWindows();

图像写入

使用Cv2.ImWrite(string fileName, Mat img, int[]? prms = null)进行写入

fileName:文件名

img:写入的文件对象,Mat类型

    Cv2.ImWrite("test2.png", mat);

猜你喜欢

转载自blog.csdn.net/qq_39427511/article/details/130457391