OpenCV란 Open Source Computer Vision으로 실시간 컴퓨터 비전을 목적으로 한 프로그래밍 라이브러리이다.
흑백 이미지의 밝기 조절을 해보자
👀 for문을 이용하여 밝기 조절
먼저 bright라는 0으로 초기화된 2차원 배열을 선언한다. 배열의 크기는 그레이 이미지의 가로 픽셀 수 X 세로 픽셀 수인 512 X 512 인 2차원 배열이다. 다음 그레이 이미지의 2차원 배열을 반복문으로 돌면서 배열의 값에 50을 더한 것이 255보다 크다면 배열의 값을 최대인 255로 설정하는 예외처리를 하였다. 그렇지 않다면 원래의 배열 값에 50을 더해 bright 배열 값에 저장한다.
예외처리를 해야 하는 이유가 무엇일까 ❓
이미지의 결과값이 255 보타 큰 경우에 256으로 나눈 나머지 값을 사용하는 것이 Numpy 연산의 특징이기 때문이다. 이미지를 밝게 하려는 결과를 원했지만 오히려 이미지가 어두워질 수 있다. 예를 들어 150 + 150을 더하면 300 % 256을 할 경우 44로 픽셀 값이 오히려 더 어두워진다.
하지만 예외처리를 하여도 픽셀값에 50을 더한 것은 하얗게만 나오고 어둡게 한 것도 그림이 많이 날아갔다. 우리가 원하는 결과가 안 나온 이유는 화소 값에 8-bit unsingned 값이 들어가지 않고 float(실수) 값이 들어갔기 때문이다. 실수 값이 들어간 이유는 np.zeros()의 data-type의 디폴트값이 float64이기 때문이다.
np.zeros함수를 사용하여 0으로 초기화한 bright 배열에 데이터 타입이 float형인 것을 확인할 수 있다. 따라서 이를 정수로 바꿔주어야 한다.
1️⃣ 데이터 타입을 8 비트 부호없는 정수형으로 지정해 줄 경우 해결
2️⃣ cv.imshow 함수를 사용할 때 처리
Winname : 창이름, mat : 이미지 배열
이때 mat의 data type에 따라 처리하여 주면 된다.
현재의 이미지는 64비트의 float형이므로 배열을 255로 나눈다.
✌ 그레이 이미지 밝기 조절 성공
👀 cv.add 모듈 사용
add 모듈을 사용하면 화솟값이 255가 넘어갈 경우 알아서 255로 지정해주기 때문에 예외처리를 할 필요가 없이 간단히 그레이 이미지 밝기 조절이 가능하다.
'Image processing' 카테고리의 다른 글
엣지 검출과 허프 변환 (0) | 2021.03.12 |
---|---|
이미지를 부드럽게 그리고 날카롭게 만들어보기 (0) | 2021.02.17 |
화소와 색공간에 대해 알아보자 (0) | 2021.02.04 |