해당 포스트는 "열혈강의 영상처리 프로그래밍" 책의 내용을 요약한 것이다.
※ 영상의 채널 단위 접근과 변환
영상의 각 채널을 따로 분리하여 다뤄야 할 때가 있다. 예로 컬러 영상의 R채널만을 화면 출력으로 보고 싶다고 할 때 특정 채널만을 출력할 수 있는 화면 출력 함수를 만들어도 좋지만, 컬러 영상에서 원하는 채널을 추출하는 함수를 만든다면 다방면에서 사용할 수 있다. 또한, 고급 영상 처리 알고리즘을 구현하다 보면 여러 개의 채널을 가지는 영상을 다루어야 하는데 이 때 영상에서 특정 채널을 추출하는 기능이 있다면 편리할 것이다.
<채널 추출 함수>
CMyImage<T> GetChannelImg(int nChannel) const { CMyImage<T> dst(m_nWidth, m_nHeight); for (int r=0 ; r<m_nHeight ; r++) { T* pSrc = GetPtr(r); T* pDst = dst.GetPtr(r); int idx = nChannel; for (int c=0 ; c<m_nWidth ; c++) { pDst[c] = pSrc[idx]; idx += m_nChannels; } } return dst; }
매개 변수로 채널 번호를 넣으면 해당 채널을 단일 채널 영상, 즉 회색조 영상으로 반환한다.
<채널 삽입 함수>
void PutChannelImg(const CMyImage<T>& src, int nChannel) { int nWidth = src.GetWidth(); int nHeight = src.GetHeight(); for (int r=0 ; r<nHeight ; r++) { T* pSrc = src.GetPtr(r); T* pDst = GetPtr(r); int idx = nChannel; for (int c=0 ; c<nWidth ; c++) { pDst[idx] = pSrc[c]; idx += m_nChannels; } } }
회색조 영상과 함께 채널 번호를 넣으면 번호에 해당하는 영상 채널을 입력한 회색조 영상으로 대체한다.
'영상처리 프로그래밍' 카테고리의 다른 글
색 공간(2) - YIQ, YUV, YCbCr (0) | 2017.06.13 |
---|---|
색 공간(1) - RGB, CMY (0) | 2017.06.13 |
영상의 기하학적 변환 (0) | 2017.06.12 |
영상의 평행 이동, 회전, 확대 및 축소 (0) | 2017.06.12 |
픽셀 값의 보간 방법(3) - 입방 회선 보간 (0) | 2017.06.12 |