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);
}
}
}
}
그래서 이렇게 실행됩니다. ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]