해당 포스트는 "열혈강의 영상처리 프로그래밍" 책의 내용을 요약한 것이다.



RGB 채널로 된 영상에서 각 채널의 RGB 값을 조절하여 색의 농도를 옅게 하거나 진하게 하기는 힘들다. 반면 HSV 색 공간과 같이 색의 3속성을 이용하면 이러한 작업을 쉽게 수행할 수 있다.

다음은 HSV 색 공간을 이용하여 영상의 색감을 조절하는 순서를 나타낸 그림이다.

먼저, RGB 채널 영상을 HSV 채널 영상으로 변환한다. HSV 각 채널의 값을 변경하고 이들을 다시 합쳐 RGB 색 공간으로 변환 후 결과 영상을 얻으면 RGB 영상의 색감을 조절할 수 있다.

다음은 위 그림을 코드로 구현했다.


AdjHsv() { Rgb2hsv() //RGB 영상에서 HSV 영상으로 바꾼다. (앞 포스트에서 구현했다.) CDoubleImage tmp; tmp = m_imageHSV.GetChannelImg(0)*m_dVal; // m_dVal은 미리 입력받은 기존 채도 값에 곱해줄 변수 m_imageHSVAdj.PutChannelImg(tmp, 0); tmp = m_imageHSV.GetChannelImg(1)*m_dSat; // m_dSat은 미리 입력받은 기존 채도 값에 곱해줄 변수 m_imageHSVAdj.PutChannelImg(tmp, 1); tmp = m_imageHSV.GetChannelImg(2)*m_dHue; // m_dHue은 미리 입력받은 기존 색상 값에 곱해줄 변수 m_imageHSVAdj.PutChannelImg(tmp, 2); Hsv2rgb(); //HSV 영상에서 RGB 영상으로 바꾼다. (앞 포스트에서 구현했다.) }

GetChannelImg와 PutChannelImg 메서드 "영상의 채널단위 접근과 변환" 포스트에서 구현했고 Rgb2hsv와 Hsv2rgb 메서드는 "색 공간(3) - HSV, HSL" 포스트에서 구현했다. 해당 포스트에서 참조하면 될 것 같다.

+ Recent posts