「图像处理」OpenCV在C#中使用基础(OpenCVSharp)

1、关于OpenCVSharp

以前做图像处理的算法开发的时候,一直都是再用C++和opencv,说实话我的C++学的不怎么样,封装dll等也都挺麻烦的。后来不怎么开发C++了,开始投入Python、C#等的开发。

一直觉得C#是一门比C++更灵活好学,比Python更加规范与传统,感觉很适合我。但是在图像处理这块,一直没有很好的图像处理库。

以前搜过,发现EmguCV是opencv在C#中的替代品,但是貌似学起来挺难的,后来又发现了 AForge.Net,结合C#貌似很不错的,还发现了OpenCVSharp,就是一个用其是OpenCV的.NET wrapper,它比Emgucv更接近于原始的OpenCV。

这次先主要介绍一下OpenCVSharp的一些基础操作

2、安装OpenCVSharp

1、使用VS的话,使用nuget进行搜索安装就好,个人建议安装OpenCvSharp3-AnyCPU 。

2、另一种方法呢就是去官网直接下载,然后引用“OpenCvSharp.dll”到依赖中

3、敲码OpenCVSharp

命名空间要引用:using OpenCvSharp;

例如(有点闲的慌):

//NameSpace:    CVSharp
//FileName:     CVSharp
//Create By:    raink
//Create Time:  2019/9/27 14:24:08

using System;
using System.Collections.Generic;
using System.Text;
using OpenCvSharp;

namespace CVSharp
{
    class CVSImage
    {
        private string path;
        /// <summary>
        /// 图像文件的全路径
        /// </summary>
        public string Path { get => path; set => path = value; }

        private int width;
        /// <summary>
        /// 图像的宽
        /// </summary>
        public int Width { get => width; }

        private int height;
        /// <summary>
        /// 图像的高
        /// </summary>
        public int Height { get => height; }

        private long size;
        /// <summary>
        /// 图像的尺寸 size = width * height
        /// </summary>
        public long Size { get => size; }


        /*-----------------------------------------------------------------*/

        private Mat srcImg;

        public CVSImage()
        {
            path = "";
            width = 0;
            height = 0;
            size = 0;
            srcImg = new Mat();
        }

        public CVSImage(string imagePath, int readMode=1)
        {
            path = imagePath;
            srcImg = Cv2.ImRead(path, (ImreadModes)readMode);
            width = srcImg.width;
            height = srcImg.height;
            size = width * height;
        }

        /*-----------------------------------------------------------------*/

        /// <summary>
        /// 预览图像
        /// </summary>
        /// <param name="winName">窗口名</param>
        /// <param name="windowType">0-Normal(可调窗口尺寸),1-Autosize(图像原始大小)</param>
        /// <param name="showTime">窗口停留时间(0则一直等待输入)</param>
        /// <returns>异常返回-1,正常返回1</returns>
        public int showImage(string winName, int windowType=1, int showTime=0)
        {
            if (srcImg == null || showTime < 0)
            {
                return -1;
            }
            WindowMode mode = (WindowMode)windowType;
            Cv2.NamedWindow(winName, mode);
            Cv2.ImShow(winName, srcImg);
            Cv2.WaitKey(showTime);
            return 0;
        }
    }
}

然后再主函数里面调用一下:

using System;
using CVSharp;

namespace CVSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            CVSImage cvImage = new CVSImage("D:\\Asuna.jpg");
            Console.WriteLine("image width: {0}", cvImage.Width);
            Console.WriteLine("image height: {0}", cvImage.Height);
            cvImage.showImage("Asuna", 0);
        }
    }
}

运行结果如下:


其实OpenCVSharp使用起来的感觉和在C++上使用opencv是一样的,常用函数都能找到。

发布了21 篇原创文章 · 获赞 5 · 访问量 3673

猜你喜欢

转载自blog.csdn.net/Raink_LH/article/details/101536185