C#에서 OpenCVSharp를 사용해서 OpenCV 사용하기
이번에도 기록을 위해서 간략하게 C#에서 OpenCV를 사용하기 위해서 Wrapping 용도로 OpenCVSharp를 이용합니다.
OpenCvSharp-2.4.10-x64~.zip 파일명처럼 OpenCV와 동일한 버전으로 찾아서 압축을 풀어 놓으시면 됩니다.
Form을 같이 만들면서 실습하였습니다.
Solution Explorer에서 우클릭하면 Add Reference해서 Browse 해서
OpenCVSharp.dll를 추가해줍니다.
그리고 Form 디자인을 합니다.
ToolBox에서 오른쪽 클릭을 하면 Choose ToolBox Item이 나옵니다. 여기서 Browse해서 OpenCvSharp.UserInterface.dll을 추가합니다.
위 그림처럼 2가지가 추가됩니다.
PictureBoxpl을 이용해서 그림을 보여줄 수 있습니다.
다음 코드를 이용해서 그림을 출력하도록 합니다.(http://tramper2.blog.me/100070878701) 이곳을 참고했습니다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
using System.Runtime.InteropServices;
namespace TestOpenCVSharp
{
public partial class Form1 : Form
{
IplImage src, result;
public Form1()
{
InitializeComponent();
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
loadImage(openFileDialog1.FileName);
}
else
{
return;
}
}
private void loadImage(String filename)
{
src = new IplImage(filename);
pictureBoxIpl1.ImageIpl = src;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (src != null) Cv.ReleaseImage(src);
if (result != null) result.Dispose();
}
private void pictureBoxIpl1_Click(object sender, EventArgs e)
{
if (pictureBoxIpl1.ImageIpl == null) return;
using(CvWindow wind = new CvWindow("Original"))
{
wind.Image = src;
Cv.WaitKey(0);
}
}
private void pictureBoxIpl2_Click(object sender, EventArgs e)
{
if (pictureBoxIpl2.ImageIpl == null) return;
using (CvWindow wind = new CvWindow("Reuslt"))
{
wind.Image = result;
Cv.WaitKey(0);
}
}
}
}