Notice
Recent Comments
- 이런 감상평 댓글 너무 좋습니다. 다른 분들은 어떻게 생각하는지 알 수 있어서 마⋯
- 책을 읽긴 했지만 잘 머리 속에 정리 되지 않았던 흐름이 잘 정리되었습니다. 감사⋯
- 아이구 읽어주셔서 고맙습니다. 새해 복 많이 받으세요 😀
- 저도 최근에 이방인 제목만 알고 있다가, 한번 읽어보려고 구매했는데, 너무나 잘 ⋯
- 고맙습니다 :)
- 항상 잘 보고 있습니다 좋은 하루 되세요 :)
- 별 거 아닌 내용인데 이렇게 댓글 남겨주셔서 고맙습니다 :)
- 좋은 글에 대한 감사함을 댓글로 표현합니다. 자세한 설명글 감사합니다.
- OpenCV 버전 4부터는 findContours()가 값을 두 개만 리턴합니다.⋯
- 맨 앞에 im2는 빼야하는 듯 합니다.
- 혹시 im2, contour, hierarchy = cv2.findContour⋯
- 예, 이해하신 흐름이 맞습니다. 다만 '전체적인 분류 성능'을 어떻게 정의하냐에⋯
- 글 감사합니다. 궁금한 부분이, 프로세스가 다음 stump으로 넘어갈때, 샘플링⋯
- 👍
- 표로 정리해주셔서 이해가 한번에 잘 됐어요
귀퉁이 서재
OpenCV - 21. 블러링을 활용한 모자이크 처리, 이미지 스케치 효과 적용하기 본문

이번 포스팅에서는 블러링을 활용한 모자이크 처리와 이미지에 스케치 효과를 적용하는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다.
코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter
블러링을 활용한 모자이크 처리
마우스로 드래그하여 선택한 부분을 블러링 효과로 모자이크 처리를 해보겠습니다. 마우스 드래그 후 엔터를 눌러주면 됩니다.
# 블러링을 활용한 모자이크 (workshop_mosaic2.py)
import cv2
ksize = 30 # 블러 처리에 사용할 커널 크기
win_title = 'mosaic' # 창 제목
img = cv2.imread('../img/taekwonv1.jpg') # 이미지 읽기
while True:
x,y,w,h = cv2.selectROI(win_title, img, False) # 관심영역 선택
if w > 0 and h > 0: # 폭과 높이가 음수이면 드래그 방향이 옳음
roi = img[y:y+h, x:x+w] # 관심영역 지정
roi = cv2.blur(roi, (ksize, ksize)) # 블러(모자이크) 처리
img[y:y+h, x:x+w] = roi # 원본 이미지에 적용
cv2.imshow(win_title, img)
else:
break
cv2.destroyAllWindows()
이미지에 스케치 효과 적용하기
카메라로 찍은 이미지에 2D 스케치 효과를 적용해보겠습니다. 세부적인 코드는 지금까지 배웠던 것들입니다.
# 스케치 효과 (workshop_painting_cam.py)
import cv2
import numpy as np
# 카메라 장치 연결
cap = cv2.VideoCapture(0)
while cap.isOpened():
# 프레임 읽기
ret, frame = cap.read()
# 속도 향상을 위해 영상크기를 절반으로 축소
frame = cv2.resize(frame, None, fx=0.5, fy=0.5, \
interpolation=cv2.INTER_AREA)
if cv2.waitKey(1) == 27: # esc키로 종료
break
# 그레이 스케일로 변경
img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 잡음 제거를 위해 가우시안 플러 필터 적용(라플라시안 필터 적용 전에 필수)
img_gray = cv2.GaussianBlur(img_gray, (9,9), 0)
# 라플라시안 필터로 엣지 검출
edges = cv2.Laplacian(img_gray, -1, None, 5)
# 스레시홀드로 경계 값 만 남기고 제거하면서 화면 반전(흰 바탕 검은 선)
ret, sketch = cv2.threshold(edges, 70, 255, cv2.THRESH_BINARY_INV)
# 경계선 강조를 위해 침식 연산
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3,3))
sketch = cv2.erode(sketch, kernel)
# 경계선 자연스럽게 하기 위해 미디언 블러 필터 적용
sketch = cv2.medianBlur(sketch, 5)
# 그레이 스케일에서 BGR 컬러 스케일로 변경
img_sketch = cv2.cvtColor(sketch, cv2.COLOR_GRAY2BGR)
# 컬러 이미지 선명선을 없애기 위해 평균 블러 필터 적용
img_paint = cv2.blur(frame, (10,10) )
# 컬러 영상과 스케치 영상과 합성
img_paint = cv2.bitwise_and(img_paint, img_paint, mask=sketch)
# 결과 출력
merged = np.hstack((img_sketch, img_paint))
cv2.imshow('Sketch Camera', merged)
cap.release()
cv2.destroyAllWindows()
'OpenCV' 카테고리의 다른 글
OpenCV - 23. 허프 변환(Hough Transformation) (0) | 2020.10.24 |
---|---|
OpenCV - 22. 컨투어(Contour) (7) | 2020.10.20 |
OpenCV - 20. 이미지 피라미드(Image Pyramid) (0) | 2020.10.12 |
OpenCV - 19. 모폴로지(Morphology) 연산 (침식, 팽창, 열림, 닫힘, 그레디언트, 탑햇, 블랙햇) (0) | 2020.10.11 |
OpenCV - 18. 경계 검출 (미분 필터, 로버츠 교차 필터, 프리윗 필터, 소벨 필터, 샤르 필터, 라플라시안 필터, 캐니 엣지) (4) | 2020.10.08 |
0 Comments