OpenCvSharp를 사용하여 웹캠에서 영상을 캡처하고 화면에 표시하는 프로그램

00·2025년 1월 14일

배경

OpenCvSharp를 사용하여 웹캠에서 영상을 캡처하고 화면에 표시하는 간단한 프로그램을 만든다.

단계

1.웹캠을 열고,
2.프레임을 읽어와 화면에 표시하고,
3.'q' 키를 누르면 웹캠 뷰어를 종료한다.

cs 코드

using OpenCvSharp; // OpenCVSharp 라이브러리를 사용하기 위한 네임스페이스 선언

// 웹캠에서 영상 캡처
VideoCapture capture = new VideoCapture(0); // 0은 기본 웹캠 장치를 나타냅니다. VideoCapture 객체를 생성하여 웹캠을 엽니다.

// 캡처가 성공적으로 열렸는지 확인
if (!capture.IsOpened()) // IsOpened() 메서드를 사용하여 웹캠이 정상적으로 열렸는지 확인합니다.
{
    Console.WriteLine("카메라를 열 수 없습니다."); // 웹캠을 열 수 없으면 오류 메시지를 출력합니다.
    return; // 프로그램을 종료합니다.
}

// Mat 객체 생성
Mat frame = new Mat(); // Mat 객체는 OpenCV에서 이미지를 표현하는 데 사용되는 클래스입니다. 빈 Mat 객체를 생성합니다.

// 무한 루프를 돌면서 프레임을 읽어와 화면에 표시
while (true) // 무한 루프를 사용하여 웹캠에서 프레임을 계속 읽어옵니다.
{
    capture.Read(frame); // Read() 메서드를 사용하여 웹캠에서 현재 프레임을 읽어와 frame 객체에 저장합니다.

    if (!frame.Empty()) // Empty() 메서드를 사용하여 frame 객체가 비어 있는지 확인합니다. 비어 있지 않으면, 즉 프레임을 읽어오는 데 성공하면 다음 코드를 실행합니다.
    {
        Cv2.ImShow("Webcam", frame); // ImShow() 메서드를 사용하여 frame 객체를 "Webcam" 창에 표시합니다.
    }

    if (Cv2.WaitKey(1) == 'q') // WaitKey(1) 메서드는 1밀리초 동안 키 입력을 기다립니다. 'q' 키를 누르면 루프를 종료합니다.
        break;
}

// 캡처 해제
capture.Release(); // Release() 메서드를 사용하여 웹캠 캡처를 해제합니다.
Cv2.DestroyAllWindows(); // DestroyAllWindows() 메서드를 사용하여 모든 OpenCV 창을 닫습니다.

코드 설명

  1. 웹캠 열기: VideoCapture 객체를 생성하여 웹캠을 엽니다. 이때 생성자의 인자로 0을 전달하면 기본 웹캠 장치를 사용합니다.
  2. 프레임 읽기: Read() 메서드를 사용하여 웹캠에서 현재 프레임을 읽어옵니다. 읽어온 프레임은 Mat 객체에 저장됩니다.
  3. 프레임 표시: ImShow() 메서드를 사용하여 Mat 객체를 화면에 표시합니다.
  4. 종료: WaitKey() 메서드를 사용하여 키 입력을 기다리고, 'q' 키를 누르면 루프를 종료합니다.
  5. 자원 해제: Release() 메서드를 사용하여 웹캠 캡처를 해제하고, DestroyAllWindows() 메서드를 사용하여 모든 OpenCV 창을 닫습니다.

메서드 설명

VideoCapture 클래스

  • VideoCapture capture = new VideoCapture(0);
    • VideoCapture 클래스는 비디오 캡처 장치(예: 웹캠) 또는 비디오 파일에서 비디오를 캡처하는 데 사용된다.
    • new VideoCapture(0)는 기본 웹캠 장치를 사용하여 VideoCapture 객체를 생성한다. 0은 장치 인덱스를 나타내며, 일반적으로 기본 웹캠은 0번 인덱스를 가진다.
    • capture 변수는 생성된 VideoCapture 객체를 저장한다.

VideoCapture.IsOpened() 메서드

  • if (!capture.IsOpened())
    • IsOpened() 메서드는 VideoCapture 객체가 성공적으로 초기화되어 웹캠을 열었는지 여부를 확인한다.
    • !capture.IsOpened()는 웹캠을 열 수 없는 경우 true를 반환한다.

Console.WriteLine() 메서드

  • Console.WriteLine("카메라를 열 수 없습니다.");
    • Console.WriteLine() 메서드는 지정된 문자열을 콘솔에 출력한다.
    • 웹캠을 열 수 없는 경우 "카메라를 열 수 없습니다."라는 메시지를 콘솔에 출력한다.

return

  • return;
    • return 문은 현재 메서드를 종료한다.
    • 웹캠을 열 수 없는 경우 return 문을 사용하여 Main 메서드를 종료하고 프로그램을 종료한다.

Mat 클래스

  • Mat frame = new Mat();
    • Mat 클래스는 OpenCV에서 이미지를 표현하는 데 사용되는 클래스이다.
    • new Mat()는 빈 Mat 객체를 생성한다.
    • frame 변수는 생성된 Mat 객체를 저장한다.

VideoCapture.Read() 메서드

  • capture.Read(frame);
    • Read() 메서드는 웹캠에서 다음 프레임을 읽어와 frame 객체에 저장한다.

Mat.Empty() 메서드

  • if (!frame.Empty())
    • Empty() 메서드는 Mat 객체가 비어 있는지 여부를 확인한다.
    • !frame.Empty()frame 객체가 비어 있지 않은 경우, 즉 프레임을 읽어오는 데 성공한 경우 true를 반환한다.

Cv2.ImShow() 메서드

  • Cv2.ImShow()이미지 출력 함수로 프레임을 시각적으로 표시한다.
  • Cv2.ImShow("Webcam", frame);
    • ImShow() 메서드는 지정된 창에 Mat 객체를 표시한다.
    • "Webcam"은 윈도우 창의 제목이고, frame은 윈도우 창에 표시할 Mat 객체(Mat 이미지)이다.

Cv2.WaitKey() 메서드

  • Cv2.WaitKey()키 입력 대기 함수로 특정 시간마다 대기하게 한다.
  • Cv2.WaitKey(ms)를 사용해 ms만큼 키 입력을 기다린다.
  • if (Cv2.WaitKey(1) == 'q')
    • WaitKey(1) 메서드는 1밀리초 동안 키 입력을 기다린다.
    • 키 입력이 있으면 해당 키의 ASCII 코드를 반환하고, 키 입력이 없으면 -1을 반환한다.
    • Cv2.WaitKey(1) == 'q'는 'q' 키를 눌렀는지 확인한다.

break

  • break;
    • break 문은 현재 루프를 종료한다.
    • 'q' 키를 누르면 break 문을 사용하여 while 루프를 종료한다.

VideoCapture.Release() 메서드

  • capture.Release();
    • Release() 메서드는 웹캠 캡처를 해제하고 관련 리소스를 해제한다.

Cv2.DestroyAllWindows() 메서드

  • Cv2.DestroyAllWindows();
    • DestroyAllWindows() 메서드는 모든 OpenCV 창을 닫는다.

참조

C# OpenCV 강좌 : 제 5강 - VIDEO 출력
https://076923.github.io/posts/C-opencv4-5/

0개의 댓글