C# OpenCV 강좌 : 제 9강 - 자르기
자르기(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를 사용하기 하게 됩니다.
원본 이미지가 소실되므로 원본 이미지 자체에서 작업했다면 초기화
합니다.
그래픽스 알아보기
: 6강 바로가기
메인 코드
using (OpenCV Convert = new OpenCV())
{
pictureBoxIpl2.ImageIpl = Convert.Slice(src);
}
Slice
은 (240, 280) ~ (405, 315)
까지의 이미지를 표시합니다.
출력 결과
원본
(240, 280) ~ (405, 315)
공유하기


댓글 남기기