본문 바로가기
AI 컴퓨터 비전프로젝트

[DL] 엣지검출(Canny) , 필터캠

by 바다의 공간 2024. 10. 7.

엣지(edge) 검출


- 물체의 윤곽선(경계선)이 해당
- 영상에서 화소의 밝기가 급격하게 변하는 부분
- 에지를 검출할 수 있으면 물체의 윤곽선을 알 수 있음
- "케니 에지 검출"은 상당한 수준으로 에지를 신뢰성 있게 검출하는 방법
    cv2.Canny(영상, 최소임계값, 최대임계값, 커널)
    최소임계값, 최대임계갑:두개의 경계값(max, min)을 지정해서 경계에 있는 영역 픽셀을 찾음.

import cv2
import numpy as np

img = cv2.imread('./dog.jpg')


med_val = np.median(img)
lower = int(max(0, 0.7*med_val)) #95 #중앙값의 70%
upper = int(min(255, 1.3 * med_val)) #176 #중앙값의 130%
print(lower, upper)

dst = cv2.Canny(img, lower, upper, 3)
cv2.imshow('img', img)
cv2.imshow('dst',dst)
cv2.waitKey()

 


필터캠(카메라)

스페이스바(27)을 누르면 필터가 변경될 수 있도록 하는 코드

import cv2
import numpy as np

def blur_filter(img):
    img = cv2.GaussianBlur(img, (0, 0), 3)
    return img

def canny_filter(img):
    med_val = np.median(img)
    lower = int(max(0, 0.7 * med_val))  # 중앙값의 70%
    upper = int(min(255, 1.3 * med_val))  # 중앙값의 130%
    dst = cv2.Canny(img, lower,upper, 3)
    return dst


#객체만들기
cap = cv2.VideoCapture(0)

#일반영상(0번 지정)
cam_mode = 0

#영상으로 만들기(무한로프 돌리기)
while True:
    ret, frame = cap.read()

    if cam_mode == 1:
        frame = blur_filter(frame)
    elif cam_mode == 2:
        frame = canny_filter(frame)
    cv2.imshow('frame', frame)


    key = cv2.waitKey(10) #10/1000
    if key == 27: #27=esc
        break
    elif key == ord(' '): #' ' space-bar
        cam_mode += 1
        if cam_mode == 3:
            cam_mode = 0

cap.release()