파이썬 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)
'파이썬 강의 > openCV' 카테고리의 다른 글
파이썬 openCV 5. 명암대비 스트레칭(streching) (0) | 2020.11.16 |
---|---|
파이썬 openCV 4. 범위 강조 (0) | 2020.11.15 |
파이썬 openCV 2. 감마 보정(Gamma Correction) (0) | 2020.11.15 |
파이썬 openCV 1. 이진화(binarization, thresholding) (0) | 2020.11.14 |
파이썬 openCV 0. openCV란? (1) | 2020.11.14 |