[OpenCV] C#์์ OpenCVSharp4 ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ (์์ ํฌํจ)
OpenCVSharp์ด๋?
OpenCV
๋ Computer Vision ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ฅผ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ์ด OpenCV๋ C/C++ ์ธ์ด
๋ก ๊ฐ๋ฐ๋์ด C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ์ง๋ง, C#์ ์ ๊ณตํ์ง ์๋๊ตฐ์. ๊ทธ๋์ ์ฐพ์๋ณด๋ C#์์๋ OpenCV๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ C# Wrapping Library
๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํฉ๋๋ค. ๊ทธ์ค ์ธ์ง๋๊ฐ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Emgu CV
์ OpenCVSharp
์ด ๋๊ฒ ์ต๋๋ค.
Emgu CV์ OpenCVSharp์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ผ๋ก, OpenCVSharp์ ๊ตฌ๋ฌธ์ด OpenCV C++ ํจ์ ๋ฐ ๋ฉ์๋์ ๋ ๊ฐ๊น๋ค๋ ์ ์ด ์๋๊ตฐ์. ์ด๋ค ๊ฒ์ ์ ํํ๋ ์๊ด์ ์์ง๋ง, ๊ฐ์ธ์ ์ผ๋ก C++ ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ๋น์ทํ OpenCVSharp์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฐธ๊ณ ๋งํฌ: https://stackoverflow.com/questions/37567494/what-is-the-difference-between-opencv-net-opencvsharp-and-emgucv
๋ณธ๋ฌธ์ ์์ ์ฝ๋๋ ํ๋จ์ ์ฒจ๋ถ๋์ด ์์ต๋๋ค.
OpenCVSharp ํ๊ฒฝ ๊ตฌ์ฑํ๊ธฐ
๊ทธ๋ผ ๋ณธ๊ฒฉ์ ์ผ๋ก OpenCVSharp์ C# ํ๋ก์ ํธ์ ๊ตฌ์ฑํด ๋ณด๊ฒ ์ต๋๋ค. C# Windows Forms ์ฑ
์ ์ ํํ๊ณ ํ๋ก์ ํธ ์ด๋ฆ์ ExamOpenCVSharp
์ผ๋ก ์์ฑํ๊ฒ ์ต๋๋ค.
Visual Studio ์๋จ์ ๋๊ตฌ ๋ฉ๋ด์์ NuGet ํจํค์ง ๊ด๋ฆฌ์์ ์๋ฃจ์ ์ฉ NuGet ํจํค์ง ๊ด๋ฆฌ ๋ฉ๋ด๋ฅผ ํด๋ฆญํฉ๋๋ค.
์๋ ๊ทธ๋ฆผ์ฒ๋ผ, NuGet-์๋ฃจ์
์ฐฝ์์ ์ฐพ์๋ณด๊ธฐ ํญ์ ํด๋ฆญํ๊ณ OpenCVSharp
์ ๊ฒ์ํฉ๋๋ค.
OpenCvSharp4 v4.5.2๋ฅผ ์ ํํ๊ณ , ์๋์ ๊ฐ์ด ํ๋ก์ ํธ๋ฅผ ์ฒดํฌํ ํ ์ค์น ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
ํน๋ณํ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์๋์ ๊ฐ์ด ์๋ฃ ํ๋ฉด์ด ํ์๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ์ ์ฐธ์กฐ ๋ถ๋ถ์ ์ฌ๋ฌ dll
์ด ์ถ๊ฐ๋ ๊ฒ๋ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ๊น์ง๋ง ์ค์ ํ๊ณ OpenCV ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์์ธ์์ "'OpenCvSharp.Internal.NativeMethods'์ ํ์ ์ด๋์ ๋ผ์ด์ ์์ ์์ธ๋ฅผ Throwํ์ต๋๋ค."๋ผ๋ ๋ฉ์์ง๊ฐ ์ฒ๋ฆฌ๋ฉ๋๋ค. ์๋์ ์ถ๊ฐ ์ ์ฐจ๋ฅผ ์งํํด ์ฃผ์ธ์.
์๋์ OpenCVSharp GitHub ํ์ด์ง์ ์ ์ํฉ๋๋ค.
https://github.com/shimat/opencvsharp
๊ทธ๋ฆฌ๊ณ ์ฐ์ธก ์ค์์ Releases๋ฅผ ํด๋ฆญํฉ๋๋ค.
NuGet์์ ์ค์นํ ๋ฒ์ ๊ณผ ๋์ผํ ๋ฒ์ ์ธ 4.5.2.20210404 ํ๊ทธ
์์ OpenCvSharp-4.5.2-2021-0405.zip
ํ์ผ์ ํด๋ฆญํ์ฌ ๋ค์ด๋ก๋ํฉ๋๋ค.
๋ค์ด๋ก๋ํ ํ์ผ์ ์์ถ์ ํด์ ํ๋ฉด ์๋์ ๊ฐ์ ํ์ผ๋ค์ด ์์ต๋๋ค.
์ฌ๊ธฐ์ NativeLib ํด๋ > win ํด๋ > x86 ๋๋ x64์ OpenCvSharpExtern.dll
ํ์ผ์ ๋ณต์ฌํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ExamOpenCVSharp ํ๋ก์ ํธ ํด๋์ ๋ถ์ฌ ๋ฃ์ต๋๋ค.
์ด์ ๋ค์ Visual Studio๋ก ๋์์์, ExamOpenCVSharp ํ๋ก์ ํธ ์ ํ ํ ๊ธฐ์กด ํญ๋ชฉ ์ถ๊ฐ ๋ฉ๋ด๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํ์ผ ์ ํ ํ๋ฉด ์ฐฝ์ด ํ์๋๋ฉด ์ฐ์ธก ํ๋จ์ ํํฐ๋ฅผ ๋ชจ๋ ํ์ผ๋ก ์ ํํ๊ณ , OpenCvSharpExtern.dll ํ์ผ์ ์ถ๊ฐํฉ๋๋ค.
ํ์ผ ์ถ๊ฐ ํ dll์ ์ ํํ๊ณ , ์ถ๋ ฅ ๋๋ ํฐ๋ฆฌ์ ๋ณต์ฌ ์ต์ ์ ํญ์ ๋ณต์ฌ๋ก ์ค์ ํฉ๋๋ค.
C# OpenCVSharp์ผ๋ก Picture Box์ ์ด๋ฏธ์ง ๋ถ๋ฌ์ค๊ธฐ
์ด์ ํ๊ฒฝ ๊ตฌ์ฑ์ ๋ชจ๋ ๋ง์ณค์ต๋๋ค. ๋ณธ๊ฒฉ์ ์ผ๋ก ์ฝ๋ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํผ์ UI๋ ์๋์ ๊ฐ์ด ๋ฒํผ๊ณผ PictureBox๋ง ์ถ๊ฐํฉ๋๋ค.
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
using OpenCvSharp;
private void buttonLoad_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
Mat image = Cv2.ImRead(dlg.FileName);
pictureBoxImage.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image);
}
}
catch(Exception exc)
{
MessageBox.Show(exc.Message);
}
}
์์ฃผ ๊ฐ๋จํ์ฃ ? ์ค๋ช
ํ ๋ด์ฉ๋ ๋ฑํ ์์ต๋๋ค. ๋ณธ๋ฌธ์์ ์์ฃผ ์ค์ํ ๋ถ๋ถ์ ํ๋ก์ ํธ์ OpenCvSharpExtern.dll
์ ๋ฐ๋ก ์ถ๊ฐํ ๊ฒ์
๋๋ค. ์ด dll์ด ์์ผ๋ฉด ๊ณ์ํด์ ์์ธ ๋ฉ์์ง๊ฐ ๋ฐ์ํ๋ ๊ผญ ์๊ณ ์ฌ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค.
์๋ ์์ ์ฝ๋๋ ์ฉ๋ ๋ฌธ์ ๋ก NuGet Package์ OpenCvSharpExtern.dll์ ์ ์ธํ๊ณ ์ฒจ๋ถํ์ต๋๋ค.
'Programming > OpenCV' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OpenCV] VTK 9.0.0๊ณผ OpenCV 4.4.0์ผ๋ก viz ๋ชจ๋ ํฌํจํ์ฌ ๋น๋ํ๊ธฐ! (9) | 2023.04.15 |
---|---|
[OpenCV] ์นด๋ฉ๋ผ์ ๋ฒํผ ์ฐ๊ฒฐํ๊ธฐ (0) | 2019.04.21 |
[OpenCV] Mat ์ด๋ฏธ์ง๋ฅผ Picture Control์ ์ถ๋ ฅํ๊ธฐ (7) | 2019.04.16 |
[OpenCV] IplImage vs Mat ๋ฌด์์ ์ฌ์ฉํด์ผ ํ ๊น? (0) | 2019.03.04 |
[OpenCV] Visual Studio 2015์์ OpenCV 4.0.1 ์ฌ์ฉํ๊ธฐ (6) | 2019.03.03 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[OpenCV] VTK 9.0.0๊ณผ OpenCV 4.4.0์ผ๋ก viz ๋ชจ๋ ํฌํจํ์ฌ ๋น๋ํ๊ธฐ!
[OpenCV] VTK 9.0.0๊ณผ OpenCV 4.4.0์ผ๋ก viz ๋ชจ๋ ํฌํจํ์ฌ ๋น๋ํ๊ธฐ!
2023.04.15 -
[OpenCV] ์นด๋ฉ๋ผ์ ๋ฒํผ ์ฐ๊ฒฐํ๊ธฐ
[OpenCV] ์นด๋ฉ๋ผ์ ๋ฒํผ ์ฐ๊ฒฐํ๊ธฐ
2019.04.21 -
[OpenCV] Mat ์ด๋ฏธ์ง๋ฅผ Picture Control์ ์ถ๋ ฅํ๊ธฐ
[OpenCV] Mat ์ด๋ฏธ์ง๋ฅผ Picture Control์ ์ถ๋ ฅํ๊ธฐ
2019.04.16 -
[OpenCV] IplImage vs Mat ๋ฌด์์ ์ฌ์ฉํด์ผ ํ ๊น?
[OpenCV] IplImage vs Mat ๋ฌด์์ ์ฌ์ฉํด์ผ ํ ๊น?
2019.03.04