본문 바로가기
Programming/Image Processing

[Image Processing][Python]이미지 이진화(Binarization)

by NoiB 2021. 12. 7.
반응형

이전 포스팅에서 말했던 대로 오늘은 numpy 모듈도 사용해서 구현해보았습니다. 사용한 샘플 사진은 저번 포스팅과 같습니다.

결과 : 

코드 : 

import cv2
import numpy as np

def cvt_to_binary(img,binary_threshold):
    img1 = np.where(img > binary_threshold,255,img)
    img2 = np.where(img1 < binary_threshold,0,img1)
    return img2

img_name = input('Input Image Name : ')
binary_threshold = int(input('Input Binary Threshold : '))
img = cv2.imread(f'./img_sample/{img_name}.jpg',0)
binary_img = cvt_to_binary(img,binary_threshold)
print(binary_img)

cv2.imwrite(f'./processed_img/{img_name}_binary.jpg',binary_img)
cv2.imshow('origin_img', binary_img)
cv2.waitKey(0)

cv2.destroyAllWindows()
#when you control the two value in np.where function it will make errors.

numpy를 쓰니까 상당히 편하게 구현이 가능했습니다. np.where() 함수를 쓸 때 조건 이후에 조건에 맞는 변수를 설정해줄 수 있는데 if, else로 구분하듯이 두 가지를 쓸 수 있다고 numpy 모듈 설명에는 나와있는데요. 제가 잘 모르는 건지 안되더라고요. 그래서 해당 함수를 두 번 이용해서 threshold 기준으로 크면 255를 작으면 0을 넣도록 코드를 구성했습니다.

 

이외의 것들은 저번 그레이스케일과 동일하니 넘어가도록 하겠습니다. 만약 이 코드를 사용하신다면 이미지의 경로 등을 좀 변경하셔야 할 겁니다.

반응형