C# OpenCV 강좌 : 제 7강 - 확대 & 축소

   

이미지 피라미드 (Image Pyramid)


0 이미지 피라미드 (Image Pyramid)란 이미지의 크기를 변화시켜 원하는 단계까지 샘플링하는 작업입니다. 영상이나 이미지를 확대, 축소시켜 띄울 수 있습니다.

  • 라플라시안 피라미드(Laplacian pyramid) :  다운 샘플링을 통해 이미지를 1/2배씩 축소시켜 가면서 피라미드를 생성합니다.
  • 가우시안 피라미드(Gaussian Pyramid) : 업 샘플링을 통해 이미지를 2배씩 확대 시켜가면서 피라미드를 생성합니다.


원본(Source, src)를 영상이나 이미지를 사용하면 됩니다.

영상 사용하기 : 3강 바로가기
이미지 사용하기 : 4강 바로가기


Class


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;

namespace test
{
    class OpenCV : IDisposable
    {
        IplImage zoomin;
        IplImage zoomout;
            
        public IplImage ZoomIn(IplImage src)
        {
            zoomin = new IplImage(Cv.Size(src.Width * 2, src.Height * 2), BitDepth.U8, 3);
            Cv.PyrUp(src, zoomin, CvFilter.Gaussian5x5);
            return zoomin;
        }

        public IplImage ZoomOut(IplImage src)
        {
            zoomout = new IplImage(Cv.Size(src.Width / 2, src.Height / 2), BitDepth.U8, 3);
            Cv.PyrDown(src, zoomout, CvFilter.Gaussian5x5);
            return zoomout;
        }
        
        public void Dispose()
        {
            if (zoomin != null) Cv.ReleaseImage(zoomin);
            if (zoomout != null) Cv.ReleaseImage(zoomout);
        }
    }
}                    


Class Code


public IplImage ZoomIn(IplImage src))
{
    ...
} 

public IplImage ZoomOut(IplImage src))
{
    ...
} 

ZoomIn, ZoomOut에서 영상을 확대, 축소하게 됩니다.

zoomin = new IplImage(Cv.Size(src.Width * 2, src.Height * 2), BitDepth.U8, 3);

...

zoomout = new IplImage(Cv.Size(src.Width / 2, src.Height / 2), BitDepth.U8, 3);

zoomin, zoomout에 메모리 확보를 위하여 선언합니다. IplImage(크기, 정밀도, 채널)을 입력합니다. 단색일 경우 채널은 1이며, 다색일 경우 채널은 3입니다.

  • Tip : Cv.Size()를 이용하여 zoomin, zoomout의 크기를 설정합니다.
Cv.PyrUp(src, zoomin, CvFilter.Gaussian5x5);
return zoomin;
...

Cv.PyrDown(src, zoomout, CvFilter.Gaussian5x5);
return zoomout;

PyrUp, PyrDown을 이용하여 화면을 확대, 축소합니다. Cv.Pyr*(원본, 결과, 필터)를 의미합니다.


Main Code


using (OpenCV Convert = new OpenCV())
{
 pictureBoxIpl2.ImageIpl = Convert.ZoomIn(src);
}

//

using (OpenCV Convert = new OpenCV())
{
 pictureBoxIpl2.ImageIpl = Convert.ZoomOut(src);
}

ZoomIn2배의 이미지로 확대하며, ZoomOut1/2배의 이미지로 축소합니다.


Result



원본

1


ZoomIn

2


ZoomOut

3



도움이 되셨다면 광고 클릭 부탁드립니다.

⤧  Next post C# OpenCV 강좌 : 제 8강 - 크기 조절 ⤧  Previous post C# OpenCV 강좌 : 제 6강 - 회전