상위 목록: 하위 목록: 작성 날짜: 읽는 데 8 분 소요

자르기(Slice)

영상이나 이미지의 원하는 부분만 자를 수 있습니다.

원본(Source, src)은 영상이나 이미지를 사용합니다.



클래스 코드

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

namespace Project
{
    class OpenCV : IDisposable
    {
        IplImage slice;
            
        public IplImage Slice(IplImage src)
        {
            slice = new IplImage(Cv.Size(165, 35), BitDepth.U8, 3);
            Cv.SetImageROI(src, new CvRect(240, 280, slice.Width, slice.Height));
            Cv.Resize(src, slice);
            Cv.ResetImageROI(src);
            return slice;
        }
            
        public void Dispose()
        {
            if (slice != null) Cv.ReleaseImage(slice);
        }
    }
}                    


세부 코드

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

Slice에서 영상을 원하는 부분을 자르게 됩니다.


slice = new IplImage(Cv.Size(165, 35), BitDepth.U8, 3);

slice에 메모리 확보를 위하여 선언합니다.

IplImage(크기, 정밀도, 채널)을 입력합니다.

단색일 경우 채널은 1이며, 다색일 경우 채널은 3입니다.

  • Tip : Cv.Size()를 이용하여 자를 부분의 크기를 설정합니다.


Cv.SetImageROI(src, new CvRect(240, 280, slice.Width, slice.Height));
Cv.Resize(src, slice);
Cv.ResetImageROI(src);

Cv.SetImageROI()을 이용하여 자를 부분을 설정합니다.

Cv.SetImageROI(소스, new CvRect(x좌표 시작점, y좌표 시작점, 넓이, 높이))를 의미합니다.

좌표는 왼측 상단이 (0, 0)이며 우측 하단이 (max, max)입니다.

일반적으로 사용하는 좌표계와 약간 다르니 주의하시기 바랍니다.

시작점에서 우측방향과 하단 방향으로 도착점이 됩니다.

Cv.Reisze()를 이용하여 slice에 잘라진 src를 넣어줍니다. 크기는 같기 때문에 보간할 필요가 없습니다.

Cv.ResetImageROI(src)를 이용하여 잘라진 src초기 상태의 src로 변경합니다.

잘라진 src를 반환하여 사용하여도 되지만 부가적인 작업을 추가로 하게 되면 원본 src에 `잘라진 src를 사용하기 하게 됩니다.

원본 이미지가 소실되므로 원본 이미지 자체에서 작업했다면 초기화합니다.



메인 코드

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

Slice(240, 280) ~ (405, 315)까지의 이미지를 표시합니다.



출력 결과

원본


(240, 280) ~ (405, 315)

댓글 남기기