이미지 처리 심화 - Grayscale to BGR - 특정 영역만 적용해 보기

be1le·2022년 3월 19일
9

Open-CV

목록 보기
11/11
post-thumbnail

특정한 부분만 컬러로 이미지를 바꿔보는 실습을 진행해 보도록 하겠다! 지난 시간과 코드가 모두 동일하지만 특정영역에만 컬러로 변환을 시키고 싶을때 사용할 수 있는 코드를 소개해 보겠다!

패키지 부터 로드하기!

모델 로드하기

지난시간에 설명했던 부분이지만 다시한번 간략하게 설명을 하도록 하겠다!
간단히 설명을 해보자면
해당 모델은 Caffe 라는 딥러닝 프레임워크로 학습된 모델인데 OpenCV dnn 으로 모델을 로드하는 과정에서 빠진 부분을 보충하는 코드인 것이다!

전처리

추론

항상 봐오던 setInput()함수에 차원변형이 되어있는 blob변수를 넣어준뒤 output함수에 net.forward()를 사용하여 추론을 해주게 된다.

후처리

1.늘렸던 차원을 다시 줄여준다.

2.출력 크기에 맞게 resizing을 해준다

3.l채널 이미지랑 output_resized를 채널방향으로(순방향) concatenate(합쳐주는) 해준다.
(해당 실습에서는 lab채널을 사용하였기에 추가된 flow이다. BGR채널사용시 필요하지 않다.)

4.BGR 채널로 바꿔준다.

5.출력 크기 제한 ( clip()함수사용 )

6.컴퓨터만 이해하는 결과를 다시 astype('uint8')구문을 활용하여 사람이 알아볼 수 있게 만들어 준다.

이러한 후처리를 거치고 나면 오늘 우리가 말했던 특정 영역만 적용하는 코드를 적어주게 된다.

특정 영역만 적용하기

zeros_like() 함수를 사용해서 이미지와 같은 형태를 유지하면서 검은색으로 채운 이미지를 만들어 주고 난후 circle()함수를 사용하여 마스크를 원으로 그리고난뒤

color = output_bgr mask #<-마스크를 한 부분.
gray = img
(1 - mask) #<- 마스크를 안한 부분.
이구문을 통해 img overlay 하는것과 마찬가지로 나머지를 반전시켜주게 된다!

출력

이렇게 우리가 원하는 대로 잘 적용이 된것을 확인할 수 있다!
오늘 실습도 다 우리가 배운것 안에서 진행이 되었다는걸 보면 정말 하나의 코드로도 10가지 실습을 할 수 있다는 생각이 든다!

글을 마치며

위에서 말했듯이 동일한 코드나 동일한 flow의 개념도 얼마든지 다른 실습에 적용할 수 있는걸 보면 생산성이 좋은 공부라는 생각을 하게된다. 하나만 공부해도 10가지를 알 수 있다니..! 나는 정말로 너무 재밌고 즐겁다! 많은 사람들도 나와같이 재미를 느끼고 임하길 소망한다!! :)

profile
그저 그런 개발자가 되지 않겠습니다.

0개의 댓글