파이썬 강의/openCV

파이썬 openCV 3. 색 반전(color inversion)

마리사라 2020. 11. 15. 14:44
반응형

파이썬 openCV 3번째 강의는 색 반전입니다.

 

색반전은 요즘에는 잘 사용되지 않는 네거티브 필름에 사용되던 기술입니다. 옛날 카메라에 들어있는 필름통을 살펴보면 검은색 셀로판같은게 말려있는데, 그게 네거티브 필름이지요. 요즘에는 디지털카메라나 스마트폰 카메라로 사진을 찍기에, 잘 사용되지 않는 기술이지만 oepnCV에서 어떤 원리인지 살펴 보겠습니다.


0. 색 반전(color inversion)?

악마의 소닉(?)

위와 같은 사진을 보신적이 있으신가요? 옛날 세가의 소닉 매니아의 사진을 색 반전한 사진입니다. 요즘 스마트폰 카메라에도 네거티브 필터로 사진을 찍으면 저렇게 나오죠.

 

색 반전 또는 네거티브는 가장 밝은색이 반대로 가장 어두운 색이 되고, 가장 어두운색이 반대로 가장 밝은 색이 되는 현상에 의해 붙여진 이름이라고 할 수 있습니다.


1. openCV에서의 색 반전

색 반전이 어두운 부분은 밝게, 밝은 부분은 어둡게 라고 했습니다. 그렇다면 코드로 구현은 어떻게 할까요?

 

바로 255 - 화소 로 하면 색이 반전됩니다.

밝기를 예로 들었을때, 원래 밝기가 200(어두움)이면 255 - 200 은 55가 되어 밝아지는거죠.

이렇게 쉽냐구요? 네! 색 반전은 그렇게 어려운 연산이 필요 하지 않습니다. 바로 전 강의에서 사용했던 numpy모듈도 필요 없을 정도니까요.

 

그럼 바로 코드를 짜보도록 하겠습니다.

 

img = cv2.imread("lenna.png")

우선 이미지를 불러와 주시고

 

out = img.copy()

출력할 변수에 복사합니다.

 

out = 255 - out

그 후 각 화소를 255에서 빼주시면 색 반전이 끝나게 됩니다.

 

이제 영상을 출력하면

원본 영상
색 반전 영상

 

이렇게 색이 반전되서 출력되게 됩니다. 간단하죠?


2. 마치며

사실 색 반전은 다른 방법으로도 가능합니다. 바로 not 연산을 통해서 가능한데요. 이는 나중에 논리연산을 공부할 때 다시 다루도록 하겠습니다.

 

 

import cv2


img = cv2.imread("lenna.png")
out = img.copy()
out = 255 - out
cv2.imshow("original", img)
cv2.imshow("flip", out)
cv2.waitKey(0)
반응형