Cv2 클래스

00·2025년 1월 15일

Cv2

OpenCvSharp에서 Cv2는 클래스이다.

Cv2 클래스는 OpenCV 라이브러리의 거의 모든 함수를 포함하고 있어, 이미지 및 비디오 처리, 객체 인식, 머신 러닝 등 다양한 작업을 수행할 수 있도록 해준다.

즉, OpenCvSharp에서 가장 중요한 클래스 중 하나이며, 다양한 컴퓨터 비전 작업을 수행하는 데 필수적인 도구이다.

Cv2 클래스는 OpenCvSharp 네임스페이스에 속해 있으며, static 클래스이기 때문에 객체를 생성하지 않고 바로 사용할 수 있다.

역할

Cv2 클래스는 다음과 같은 주요 기능을 제공한다.

  • 이미지 및 비디오 입출력: ImRead(), ImWrite(), VideoCapture 등의 메서드를 사용하여 이미지와 비디오를 읽고 쓸 수 있다.
  • 이미지 처리: CvtColor(), Resize(), Blur(), Canny() 등의 메서드를 사용하여 이미지의 색상 공간 변환, 크기 조정, 필터링, 엣지 검출 등의 작업을 수행할 수 있다.
  • 객체 인식: CascadeClassifier 클래스를 사용하여 얼굴, 눈, 사람 등의 객체를 인식할 수 있다.
  • 머신 러닝: SVM, KNN, DecisionTree 등의 머신 러닝 알고리즘을 사용하여 이미지 분류, 객체 인식 등의 작업을 수행할 수 있다.

Cv2 클래스 사용 예시

코드

using OpenCvSharp;

// 이미지 파일 로드
Mat image = Cv2.ImRead("image.jpg");

// 이미지 크기 조절
Mat resizedImage = new Mat();
Cv2.Resize(image, resizedImage, new OpenCvSharp.Size(200, 100));

// 이미지 회색조 변환
Mat grayImage = new Mat();
Cv2.CvtColor(image, grayImage, ColorConversionCodes.BGR2GRAY);

// 이미지 출력
Cv2.ImShow("Original Image", image);
Cv2.ImShow("Resized Image", resizedImage);
Cv2.ImShow("Gray Image", grayImage);
Cv2.WaitKey(0);

// 이미지 해제
image.Dispose();
resizedImage.Dispose();
grayImage.Dispose();

코드 설명

Cv2.ImRead() 메서드를 사용하여 이미지 파일을 로드하고,

Cv2.Resize() 메서드를 사용하여 이미지 크기를 조절하고,

Cv2.CvtColor() 메서드를 사용하여 이미지를 회색조로 변환한다.

마지막으로 Cv2.ImShow() 메서드를 사용하여 이미지를 화면에 출력한다.


기능

OpenCvSharp의 Cv2 클래스는 이미지 및 비디오 처리에 필요한 다양한 기능을 제공한다. 그중에서도 가장 많이 사용되는 핵심 기능들을 쉽고 자세하게 설명해 주겠다.

// 이미지 읽기
Mat image = Cv2.ImRead("image.jpg");

// 이미지 처리

// 이미지 저장
Cv2.ImWrite("output.png", image); 

1. 이미지 읽고 쓰기

1. Cv2.ImRead()

  • Cv2.ImRead(string filename, ImreadModes flags = ImreadModes.Color): 이미지 파일을 읽어 Mat 객체로 반환한다. flags 매개변수를 사용하여 이미지를 컬러, 흑백, 또는 알파 채널을 포함한 형태로 읽어올 수 있다.

    • filename: 이미지 파일의 경로이다. 상대 경로 또는 절대 경로를 사용할 수 있다.

    • flags: 이미지를 읽어올 때 적용할 옵션이다. 이미지를 불러올 때 적용할 초기 상태 값을 지정한다. ImreadModes 열거형의 값을 사용하여 이미지의 색상 공간, 크기 등을 지정할 수 있다. 기본값은 ImreadModes.Color로, 컬러 이미지를 읽어온다.

        ImreadModes.Unchanged : 원본 사용
        ImreadModes.Grayscale : 1채널, 그레이스케일 적용
        ImreadModes.Color : 3 채널, BGR 이미지 사용
        ImreadModes.AnyDepth : 이미지에 따라 정밀도를 16/32비트 또는 8비트로 사용
        ImreadModes.AnyColor : 가능한 3 채널, 색상 이미지로 사용
        ImreadModes.LoadGdal : GDAL에서 지원하는 지리공간 데이터 이미지로 사용
        ImreadModes.ReducedGrayscale2 : 1 채널, 1/2 크기, 그레이스케일 적용
        ImreadModes.ReducedColor2 : 3 채널, 1/2 크기, BGR 이미지 사용
        ImreadModes.ReducedGrayscale4 : 1 채널, 1/4 크기, 그레이스케일 적용
        ImreadModes.ReducedColor4 : 3 채널, 1/4 크기, BGR 이미지 사용
        ImreadModes.ReducedGrayscale8 :1 채널, 1/8 크기, 그레이스케일 적용
        ImreadModes.ReducedColor8 : 3 채널, 1/8 크기, BGR 이미지 사용
        ImreadModes.IgnoreOrientation : EXIF의 방향 플래그에 따라 이미지를 회전하지 않음
        GDAL: 지리공간 데이터 추상화 라이브러리입니다.
        EXIF: 이미지에 포함된 회전 정보등을 의미합니다.
  • 예시

    Mat image = Cv2.ImRead("cat.jpg", ImreadModes.Grayscale);
    // "cat.jpg" 파일을 흑백으로 읽어온다.

2. Cv2.ImWrite()

  • Cv2.ImWrite(string filename, Mat img): Mat 객체를 지정된 파일 경로에 이미지 파일로 저장한다. 파일 형식은 파일 이름의 확장자에 따라 자동으로 결정된다.
    • filename: 이미지 파일의 경로이다. 상대 경로 또는 절대 경로를 사용할 수 있다.
    • img: 저장할 이미지 데이터를 담고 있는 Mat 객체이다.

예시

Cv2.ImWrite("output.png", image); 
// image 객체를 "output.png" 파일로 저장한다.

참고

  • 이미지 파일 형식은 파일 이름의 확장자에 따라 자동으로 결정된다.
  • ImreadModes 열거형은 OpenCvSharp 네임스페이스에 정의되어 있다.

2. 이미지 표시

Cv2.ImShow()

  • Cv2.ImShow(string winname, Mat img): 지정된 창 이름으로 창을 생성하고, Mat 객체를 창에 표시한다.

Cv2.WaitKey()

  • Cv2.WaitKey(int delay = 0): 키 입력을 기다린다. delay는 밀리초 단위의 대기 시간이다. 0을 지정하면 키 입력이 있을 때까지 무한정 기다린다.

Cv2.DestroyAllWindows()

  • Cv2.DestroyAllWindows(): 모든 OpenCV 창을 닫는다.

예시

// 이미지 표시
Cv2.ImShow("Image", image);

// 키 입력 대기
Cv2.WaitKey(0);

// 창 닫기
Cv2.DestroyAllWindows();

3. 이미지 처리

1. 색상 공간 변환

  • Cv2.CvtColor(Mat src, Mat dst, ColorConversionCodes code): 이미지의 색상 공간을 변환한다. src는 입력 이미지, dst는 출력 이미지, code는 색상 공간 변환 코드이다.
// 흑백 이미지로 변환
Mat grayImage = new Mat();
Cv2.CvtColor(image, grayImage, ColorConversionCodes.BGR2GRAY);

2. 크기 조절

  • Cv2.Resize(Mat src, Mat dst, OpenCvSharp.Size dsize, double fx = 0, double fy = 0, InterpolationFlags interpolation = InterpolationFlags.Linear): 이미지 크기를 조절한다. src는 입력 이미지, dst는 출력 이미지, dsize는 출력 이미지 크기, fx는 가로 방향 배율, fy는 세로 방향 배율, interpolation은 보간 방법이다.
// 이미지 크기를 가로 200, 세로 100으로 조절
Mat resizedImage = new Mat();
Cv2.Resize(image, resizedImage, new OpenCvSharp.Size(200, 100));

3. 블러링

  • Cv2.Blur(Mat src, Mat dst, OpenCvSharp.Size ksize, OpenCvSharp.Point? anchor = null, BorderTypes borderType = BorderTypes.Reflect101): 이미지를 블러링한다. src는 입력 이미지, dst는 출력 이미지, ksize는 블러 커널 크기, anchor는 앵커 포인트, borderType는 경계 처리 방법이다.
// 5x5 커널을 사용하여 블러링
Mat blurredImage = new Mat();
Cv2.Blur(image, blurredImage, new OpenCvSharp.Size(5, 5));

4. 엣지 검출

  • Cv2.Canny(Mat src, Mat dst, double threshold1, double threshold2, int apertureSize = 3, bool L2gradient = false): 이미지에서 엣지를 검출한다. src는 입력 이미지, dst는 출력 이미지, threshold1은 낮은 임계값, threshold2는 높은 임계값, apertureSize는 Sobel 연산자의 커널 크기, L2gradient는 그래디언트 계산 방법이다.
// Canny 엣지 검출
Mat edges = new Mat();
Cv2.Canny(image, edges, 50, 200);

5. 비디오 캡처

  • VideoCapture capture = new VideoCapture(int deviceId);: 비디오 캡처 장치(예: 웹캠)를 연다. deviceId는 장치 인덱스이다.
  • capture.Read(Mat image);: 비디오 캡처 장치에서 다음 프레임을 읽어 Mat 객체에 저장한다.
  • capture.Release();: 비디오 캡처 장치를 해제한다.
// 웹캠에서 영상 캡처
VideoCapture capture = new VideoCapture(0);

Mat frame = new Mat();
while (true)
{
    capture.Read(frame);
    if (!frame.Empty())
    {
        Cv2.ImShow("Webcam", frame);
    }
    if (Cv2.WaitKey(1) == 'q')
        break;
}

capture.Release();
Cv2.DestroyAllWindows();

이 외에도 Cv2 클래스는 다양한 이미지 및 비디오 처리 기능을 제공한다. OpenCvSharp 공식 문서를 참조하면 더 많은 정보를 얻을 수 있다.

0개의 댓글