Python/파이썬 OpenCV 공부

[파이썬 OpenCV] 영상에 스케치 필터 적용하기 - cv2.divide, cv2.GaussianBlur

AI 꿈나무 2020. 10. 4. 17:04
반응형

황선규 박사님의 <OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝>, 패스트 캠퍼스 OpenCV 강의를 공부한 내용을 정리해 보았습니다.

 


 

 

[파이썬 OpenCV] 영상에 카툰 필터 적용하기 - cv2.bilateralFilter, cv2.Canny, cv2.bitwise_and

황선규 박사님의 , 패스트 캠퍼스 OpenCV 강의를 공부한 내용을 정리해 보았습니다. 영상에 카툰 필터 적용하기  cv2.bilateralFilter, cv2.Canny, cv2.bitwise_and 함수를 이용해서 영상에 카툰 필터를 구현하�

deep-learning-study.tistory.com

 저번 포스팅에서는 영상에 카툰 필터 적용하는 방법을 알아보았습니다.

 이번에는 스케치 필터를 적용하는 방법에 대해 공부하겠습니다.

영상에 스케치 필터 적용하기 - cv2.divide, cv2.GaussianBlur

 cv2.cvtColor(), cv2.GaussianBlur(), cv2.divide() 함수를 이용해서 영상에 스케치 필터를 적용하도록 하겠습니다.

 

1. 스케치 필터 카메라

 스케치 필터 카메라는 픽셀 값의 변화가 적은 평탄한 영역은 흰색으로 출력하고 에지 근방에서 어두운 영역을 검정색, 밝은 영역은 흰색으로 설정하면 구현할 수 있습니다.

 

스케치 필터 카메라 구현 단계

(1) 기존 영상을 흑백 영상으로 변환 - cv2.cvtColor() 이용

 

(2) 흑백 영상에 가우시안 필터 적용 (블러링) - cv2.GausianBlur() 이용

 

(3) 흑백 영상에 가우시안 필터가 적용된 흑백 영상을 나누기 - cv2.divide() 이용

 

구현 코드

def pencil_sketch(img):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    blr = cv2.GaussianBlur(gray, (0, 0), 3) # 밝은 곳은 더 밝게 어두운 곳은 더 어둡게 해야 스케치스러운 느낌을 받을 수 있다
    dst = cv2.divide(gray, blr, scale=255) # 흑백영상을 블러로 나눈 값을 255로 곱함.
    return dst

 

 유의할 점은 cv2.divide() 함수에서 scale인자에 255을 설정해줬다는 것 입니다.

 255를 곱해줌으로써 나눴을 때 1이 되는 값을 255로 변경시켜 흰색을 출력할 수 있습니다.

 

스케치 필터 영상과 카툰 필터 영상을 적용하고 스페이스바를 누르면 전환되도록 구현

 이전 포스팅에서 알아보았던 카툰 필터 영상과 스케치 영상을 동시에 구현해보도록 하겠습니다.

cap = cv2.VideoCapture(0) # 카메라 오픈.

if not cap.isOpened():
    print('video open failed!')
    sys.exit()

cam_mode = 0 # 0번은 카툰필터, 1번이 스케치 필터로 설정

while True:
    ret, frame = cap.read()

    if not ret:
        break

    if cam_mode == 1: # 모드가 1번이면
        frame = cartoon_filter(frame) # 카툰필터
    elif cam_mode == 2: # 모드가 2번이면
        frame = pencil_sketch(frame) # 스케치 필터
        frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)

    cv2.imshow('frame', frame)
    key = cv2.waitKey(1)

    if key == 27: # esc누르면 종료
        break
    elif key == ord(' '): # 스페이스 누르면
        cam_mode += 1 # 모드가 1 증가
        if cam_mode == 3: # 모드가 3이 되면
            cam_mode = 0 # 0으로 변경


cap.release()
cv2.destroyAllWindows()

 

스케치 필터가 적용된 영상

 위 코드를 실행하면 스케치 필터가 적용된 영상을 출력시킬 수 있습니다.

 

 또한 스페이스바를 누르면 스케치 필터 모드에서 카툰 필터 모드로 전환되게 됩니다.

 

반응형