Microsoft MVP성태의 닷넷 이야기
.NET Framework: 707. OpenCV 응용 프로그램을 C#으로 구현 - OpenCvSharp [링크 복사], [링크+제목 복사],
조회: 37280
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)
(시리즈 글이 10개 있습니다.)
.NET Framework: 707. OpenCV 응용 프로그램을 C#으로 구현 - OpenCvSharp
; https://www.sysnet.pe.kr/2/0/11402

.NET Framework: 708. C# - OpenCvSharp을 이용한 동영상(avi, mp4, ...) 처리
; https://www.sysnet.pe.kr/2/0/11403

.NET Framework: 709. C# - OpenCvSharp을 이용한 동영상(avi, mp4, ...) 처리 + Direct2D
; https://www.sysnet.pe.kr/2/0/11404

.NET Framework: 710. C# - OpenCvSharp을 이용한 Webcam 영상 처리 + Direct2D
; https://www.sysnet.pe.kr/2/0/11405

.NET Framework: 711. C# - OpenCvSharp의 Mat 데이터 조작 방법
; https://www.sysnet.pe.kr/2/0/11406

.NET Framework: 723. C# - OpenCvSharp 사용 시 C/C++을 이용한 속도 향상 (for 루프 연산)
; https://www.sysnet.pe.kr/2/0/11422

VC++: 123. 내가 만든 코드보다 OpenCV의 속도가 월등히 빠른 이유
; https://www.sysnet.pe.kr/2/0/11423

.NET Framework: 781. C# - OpenCvSharp 사용 시 포인터를 이용한 속도 향상
; https://www.sysnet.pe.kr/2/0/11567

개발 환경 구성: 447. Visual Studio Code에서 OpenCvSharp 개발 환경 구성
; https://www.sysnet.pe.kr/2/0/11971

Graphics: 38. C# - OpenCvSharp.VideoWriter에 BMP 파일을 1초씩 출력하는 예제
; https://www.sysnet.pe.kr/2/0/12485




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);
            }
        }
    }
}

그래서 이렇게 실행됩니다. ^^

opencv_sharp_1_1.png




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 1/23/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2019-07-03 05시24분
[MJLee] 안녕하세요. 프로그래밍 + open CV를 공부를 막 시작한 사람입니다. VS code에 openCV를 설치하려고 하는데, 어려움을 겪고 있어서요, NuGet Package Manager Extension을 설치했습니다. NuGet Package Manager : Add Package 로 OpenCvSharp-AnyCPU (>= 2.4.10.20170306) 추가하니 "Success! Wrote OpenCvSharp-AnyCPU@2.4.10.20170306 to d:\CVCODE\HelloVSCode\HelloVSCode.csproj. Run dotnet restore to update your project." 라고 팝업창이 뜹니다.
PS D:\CVCODE\HelloVSCode> dotnet restore 을 실행하면 아래와 같이 나와서 설치를 못 하고 있는데, 도움 주실 수 있으신지요? 감사합니다.
D:\CVCODE\HelloVSCode\HelloVSCode.csproj : error NU1100: '.NETCoreApp,Version=v2.2'에 대해 'OpenCvSharp-AnyCPU (>= 2.4.10.20170306)'을(를) 확인할 수 없습니다.
  285.04 ms에서 D:\CVCODE\HelloVSCode\HelloVSCode.csproj에 대한 복원에 실패했습니다.
[guest]
2019-07-03 10시32분
다음의 글을 참고하세요.

Visual Studio Code에서 OpenCvSharp 개발 환경 구성
; http://www.sysnet.pe.kr/2/0/11971
정성태

... 106  107  108  109  110  111  112  113  [114]  115  116  117  118  119  120  ...
NoWriterDateCnt.TitleFile(s)
11075정성태10/20/201621008Windows: 127. Convert-WindowsImage.ps1 사용 방법 정리
11074정성태10/20/201629325Windows: 126. Windows Server 2016 평가판을 정식 버전으로 라이선스 변경하는 방법
11073정성태10/20/201625411.NET Framework: 613. 윈도우 데스크톱 응용 프로그램(예: Console)에서 알림 메시지(Toast notifications) 띄우기 [1]파일 다운로드1
11072정성태10/20/201621907VC++: 102. 새로 추가한 ATL COM 객체가 regsvr32.exe로 등록이 안 되는 문제
11071정성태10/20/201625425.NET Framework: 612. UWP(유니버설 윈도우 플랫폼) 앱에서 콜백 함수 내에서의 UI 요소 접근 방법 [1]
11070정성태10/20/201619638Windows: 125. 윈도우 서버 2016 마이그레이션
11069정성태10/19/201627368.NET Framework: 611. C++ 개발자들을 위한 C# Thread 동작 방식 [2]
11068정성태10/19/201630562Windows: 124. 윈도우 운영체제의 시간 함수 (5) - TSC(Time Stamp Counter)와 QueryPerformanceCounter [12]파일 다운로드1
11067정성태10/18/201626870Windows: 123. 윈도우 운영체제의 시간 함수 (4) - RTC, TSC, PM Clock, HPET Timer [2]
11066정성태10/17/201624510Windows: 122. 윈도우 운영체제의 시간 함수 (3) - QueryInterruptTimePrecise, QueryInterruptTime 함수파일 다운로드1
11065정성태10/15/201629969Windows: 121. 윈도우 운영체제의 시간 함수 (2) - Sleep 함수의 동작 방식 [1]
11064정성태10/14/201621641.NET Framework: 610. C# - WaitOnAddress Win32 API 사용파일 다운로드1
11063정성태10/14/201637762Windows: 120. 윈도우 운영체제의 시간 함수 (1) - GetTickCount와 timeGetTime의 차이점 [5]파일 다운로드1
11062정성태10/12/201618413오류 유형: 361. WCF .svc 호출 시 Could not find a base address that matches scheme net.tcp 예외
11061정성태10/12/201630501오류 유형: 360. IIS - 500.19 오류 (0x80070021)
11060정성태10/12/201622962오류 유형: 359. WCF - .svc 요청시 404 Not Found
11059정성태10/11/201627293.NET Framework: 609. WPF - 다중 스레드 환경에서 데이터 바인딩의 INotifyPropertyChanged.PropertyChanged에 대한 배려 [1]파일 다운로드1
11058정성태10/8/201622557개발 환경 구성: 303. Windows 10 Bash Shell - 한글 환경을 영문으로 바꾸고 싶다면?
11057정성태10/8/201617963오류 유형: 358. Windows 10 bash shell - sudo: unable to resolve host ...
11056정성태10/8/201620815개발 환경 구성: 302. Windows 10 bash shell 시작 시 [...] packages can be updated.
11055정성태10/8/201621887.NET Framework: 608. double 값을 구할 때는 반드시 피연산자를 double로 형변환! [6]
11054정성태10/5/201625919개발 환경 구성: 301. "Let's Encrypt" SSL 인증서를 Azure Cloud Services(classic)에 업데이트하는 방법
11053정성태10/5/201620576.NET Framework: 607. C# try/catch/finally의 IL 코드 표현
11052정성태9/27/201634721개발 환경 구성: 300. C# DLL에서 Win32 C/C++처럼 dllexport 함수를 제공하는 방법 [7]파일 다운로드1
11051정성태9/25/201621907개발 환경 구성: 299. docker - c:\programdata\docker\windowsfilter 폴더 정리하는 방법파일 다운로드1
11050정성태9/24/201626693VC++: 101. 반올림하지 않고 double 변수 값 출력하는 방법 [3]
... 106  107  108  109  110  111  112  113  [114]  115  116  117  118  119  120  ...