2024. 2. 22. 15:30

예전버전용 'OpenCvSharp' 캡쳐는 포스팅한적이 있습니다.

(참고 : [C#.NET, OpenCVSharp] 웹캠(Web Cam) 이미지 사용하기 )

'OpenCvSharp4'용 포스팅을 다시 합니다.

 

 

0. 필수 구성요소 설치 

누겟에서 다음 패키지를 설치합니다.

- OpenCvSharp4

- OpenCvSharp4.Extensions

 

사용하려는 운영체제나 플랫폼에 따라 ' OpenCvSharp4.runtime.[대상] ' 패키지를 설치합니다.

예>

윈도우 : OpenCvSharp4.runtime.win

UWP : OpenCvSharp4.runtime.uwp

우분투 :  OpenCvSharp4.runtime.ubuntu.18.04-x64

 

 

사용하려는 프래임웤에 따라 추가로 확장이 필요 할 수 있습니다.

- WinForm : OpenCvSharp4.Windows

- WPF : OpenCvSharp4.WpfExtensions

 

 

 

1. 비디오 캡처(VideoCapture) 개체 생성 

캠을 캡처하려면 일단 비디오 캡처(VideoCapture)개체 부터 만들어야 합니다.

 

비디오 캡처(VideoCapture)개체를 만들 때 인덱스를 전달할 수 있습니다.

이 인덱스는 운영체제가 가지고 있는 캠에 대한 인덱스입니다.(한대만 연결되어 있다면 0)

//지정된 번호의 카메라로 개체 생성
VideoCapture? cam = new VideoCapture(0);

 

 

1-1. 사용할 API 지정

비디오 캡처 개체를 만들 때 사용할 API를 지정할 수 있는데 캠이나 컴퓨터 환경에 따라서 특정 API를 지정해야 할 수 있습니다.

 

제가 가지고 있는 캠 중 'Logitech BRIO'는 카메라 크기가 '4096*2160'까지 지원하는데

이것을 윈도우에서 사용하려면 '다이렉트쇼(DirectShow)'를 사용해야 합니다.

(기본 API를 사용하면 강제로 1980*1080 크기로 캡처됩니다.)

//다이렉트쇼(DirectShow)를 사용하는 경우
VideoCapture? cam = new VideoCapture(0, VideoCaptureAPIs.DSHOW);

 

 

1-2. 카메라 설정

사용할 카메라에 맞게 환경을 설정할 수 있습니다.

//사용할 fps 설정
cam.Fps = 30;

//사용할 프레임 크기 설정
cam.FrameWidth = 1980;
cam.FrameHeight = 1080;

 

 

사용할 카메라가 지원하는 범위에서 설정해야 오류 없이 빠르게 설정됩니다.

지원 범위가 벗어나는 경우 어떤 문제가 발생할지 알 수 없습니다.

 

 

 

2. 캡처(Capture)하기

캡처를 위해서는 임시로 이미지 정보를 저장할 Mat을 생성해야 합니다.

//임시 이미지 개체 생성
Mat matTemp = new Mat();

 

 

캠을 읽어 임시 개체에 넣어 줍니다.

//지정된 장비에서 캡처
cam.Read(matTemp);

 

 

이렇게 저장된 'Mat' 개체는 원하는 가공을 해서 화면에 출력시킵니다.

 

 

3. 테스트 프로젝트

윈폼(WinForm)으로 만든 테스트 프로젝트입니다.

다운로드 : github - dang-gun/DotNetSamples/OpenCvSharp4_WebCamCapture

 

 

'Mat' 개체를 윈폼의 픽쳐 박스(PictureBox)에 출력하는 코드는 아래와 같습니다.

//화면에 출력
this.pictureOutput.Image = matTemp.ToBitmap();

 

 

마무리

'OpenCvSharp'의 최고 장점은 가급적 'OpenCv'와 구조를 동일하게 가려고 한다는 점입니다.

그런데.... 버전이 올라가면서 구조가 왜 이렇게 많이 바뀐 거니??