OpenCV 응용 프로그램을 C#으로 구현 - OpenCvSharp
많은 분들이 알고 계시겠지만, ^^ C#을 위한 OpenCVSharp 라이브러리가 github/Nuget을 통해 배포중이므로,
shimat/opencvsharp 
; https://github.com/shimat/opencvsharp
OpenCvSharp3-AnyCPU
; https://www.nuget.org/packages/OpenCvSharp3-AnyCPU/
Visual Studio에서 다음과 같이 간단하게 참조 추가를 할 수 있습니다.
Install-Package OpenCvSharp3-AnyCPU -Version 3.3.1.20171117 
그 이후로는 C# 구문의 편리함을 누리며 코딩하시면 됩니다.
using OpenCvSharp;
class Program 
{
    static void Main() 
    {
        Mat src = new Mat("lenna.png", ImreadModes.GrayScale); // ver 3 방식
        // Mat src = Cv2.ImRead("lenna.png", ImreadModes.GrayScale); // ver 2 방식
        Mat dst = new Mat();
        
        Cv2.Canny(src, dst, 50, 200);
        using (new Window("src image", src)) 
        using (new Window("dst image", dst)) 
        {
            Cv2.WaitKey();
        }
    }
}
Windows Forms로 작업하는 경우 OpenCvSharp.Window를 별도로 띄우지 않고 Form 내에 이미지 출력을 하고 싶을텐데요. 이를 위해,
[Cpp] Converting Image
; https://github.com/shimat/opencvsharp/wiki/%5BCpp%5D-Converting-Image
다음과 같이 Mat으로부터 Bitmap을 출력해 사용하면 됩니다.
Mat mat = new Mat("foobar.jpg", ImreadModes.Color);
Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
첨부 파일은 이미지를 gray scale로 로딩한 후 Canny 처리한 이미지를 각각의 PictureBox에 출력하는 예제입니다.
using OpenCvSharp;
using System;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            using (Mat src = new Mat("portal_start.png", ImreadModes.GrayScale))
            using (Mat dst = src.Canny(50, 200))
            {
                this.pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);
                this.pictureBox2.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(dst);
            }
        }
    }
}
그래서 이렇게 실행됩니다. ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]