관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[openCV] 이미지 이진화 하기 본문

OpenCV

[openCV] 이미지 이진화 하기

막무가내막내 2019. 7. 14. 23:58
728x90
import cv2


def nothing(x):
    pass

# THRE바 생성
# THRE바를 붙일 윈도우를 namedWindow함수로 생성해준다. (평소에는 생략가능한 함수였다.)
cv2.namedWindow('Binary')
# 조정가능한 값 범위 설정
cv2.createTrackbar('threshold', 'Binary', 0, 255, nothing)
# 초깃값 설정
cv2.setTrackbarPos('threshold', 'Binary', 127)


# 이미지 파일을 컬러로 읽어온다
img_color = cv2.imread('food.jpg', cv2.IMREAD_COLOR)
# 컬러이미지를 화면에 보여준다.
cv2.imshow('Color', img_color)

# 컬러이미지를 그레이스케일 이미지로 변환한다.
img_gray = cv2.cvtColor(img_color, cv2.COLOR_BGR2GRAY)
# 그레이스케일 이미지 영상을 화면에 보여준다.
cv2.imshow('Gray', img_gray)

# 트랙바 이동시 바로 결과를 볼 수 있도록 반복문 추가
while(True):
    # 트랙바 현재값 가져오기
    low = cv2.getTrackbarPos('threshold', 'Binary')
    # threshold 함수를 사용해서 그레이스케일 이미지를 2진화 한다. (param1 : 2진화할 이미지(그레이스케일이미지)
    # 2: 이것을 기준으로 결과픽셀이 흰색 혹은 검은색이 됨  ,
    # 3 : THRESH_BINARY인 경우 threshold보다 입력이미지의 이미지 픽셀이 클 때 3번째 매개변수인 255를 결과 이미지 픽셀값으로 한다. 작다면 0으로한다.  THRESH_BINARY_INV는 반전된 결과를 보여준다.
    ret,img_binary = cv2.threshold(img_gray, low, 255, cv2.THRESH_BINARY_INV)
    # 이진화한 결과를 화면에 보여준다.
    cv2.imshow('Binary', img_binary)

    # 원본이미지와 2진이미지를 and연산함
    img_result = cv2.bitwise_and(img_color, img_color, mask = img_binary)
    # 해당 결과보여줌 (보통 자기가 원하는 이미지만 남길려면 해당 이미지를 흰색이 되게하고 나머지를 검정색이 되게한다)
    cv2.imshow('Result', img_result)

    # ESC 키 누르시 break
    if cv2.waitKey(1)&0xFF == 27:
        break

# 사용끝난거 자원해제
cv2.destroyAllWindows()

이미지를 이진화하는 것을 실습해보고 정리해봤다. threshold가 이진화 하는데 핵심적인 함수이다.

그리고 자기가 원하는 이미지를 추출할 때는 흑백에서 백으로 한다고 한다. 

 

출처 및 참고 : https://www.youtube.com/watch?v=0KCTvoMXHPE&list=PLwfJJiO20qkDue05S5MNhgYNnClMVlagN&index=1

728x90
Comments