인공지능 프로그래밍 3일차

뭐라구요·2024년 3월 26일
0

Blur

정의: 블러(Blur)는 이미지의 잡음을 제거하거나 이미지를 부드럽게 만드는 작업입니다. 주로 특정한 부분을 감추거나 이미지를 더 잘 인식할 수 있도록 하는 데 사용됩니다. 가우시안 블러(Gaussian Blur)나 미디안 블러(Median Blur) 등 다양한 블러링 기법이 있습니다.

사용 이유: 이미지에서 발생한 잡음이나 불필요한 세부 사항을 제거하여 이미지 처리 작업의 정확성을 향상시키고 잡음에 의한 오류를 방지합니다. 또한 블러 처리를 통해 에지 검출(Edge Detection) 알고리즘의 성능을 향상시킬 수 있습니다.

Canny

정의: 이미지에서 에지를 감지하는 데 사용되는 알고리즘으로, 에지의 위치와 방향을 정확하게 파악할 수 있습니다.

사용이유 : 미지에서 물체나 패턴의 윤곽을 찾거나 추출하기 위해 사용됩니다. 캐니 에지 검출은 높은 정확성과 낮은 잡음 민감도를 제공하여 다양한 컴퓨터 비전 및 이미지 처리 작업에 적합합니다.

Erode

정의 : 침식은 이미지 처리에서 사용되는 기본적인 모폴로지 연산 중 하나로, 이미지에서 객체의 경계를 깎아내는 작업을 수행한다.

사용이유 : 작은 객체를 제거하거나 객체의 주변을 정리하고 객체 간의 간격을 줄이는 등의 목적으로 사용됩니다.

Dilation

정의 : 팽창은 이미지 처리에서 사용되는 모폴로지 연산 중 하나로, 이미지에서 객체의 경계를 확장하는 작업을 수행한다.

사용이유 : 객체를 연결하거나 채워넣는 등의 목적으로 사용됩니다. 또한 이미지에서 작은 구멍을 메우는 데 사용될 수 있습니다. 팽창은 노이즈 제거에도 효과적일 수 있습니다.

affine

이동(Translation): 이미지를 지정된 양만큼 수평 및 수직 방향으로 이동시킵니다. 이는 이미지의 위치를 조정하는 데 사용됩니다.

회전(Rotation): 이미지를 중심을 기준으로 회전시킵니다. 이는 이미지의 방향을 조정하는 데 사용됩니다.

크기 조절(Scaling): 이미지의 크기를 조절합니다. 이는 이미지를 확대하거나 축소하는 데 사용됩니다.

찌그러짐(Shearing): 이미지를 한 축을 기준으로 기울입니다. 이는 이미지를 뒤틀거나 기울이는 데 사용됩니다.

Countour란?

: 이미지에서 연속된 동일한 색상이나 강도를 가진 영역의 외곽선을 나타내는 것입니다. 즉, 컨투어는 이미지에서 객체의 윤곽선을 나타내는데 사용됩니다.

hear cascade란?

: 객체 감지(Object Detection)를 위한 기술 중 하나입니다. 이 기술은 하르 특징(Haar Features)을 사용하여 이미지에서 특정 객체를 감지하는 데 사용됩니다. 주로 얼굴 인식, 차량 감지, 눈 인식 등의 작업에 적용됩니다.

과제 1

import cv2
import numpy as np

image_path = "이미지 경로(비밀~)" 
notebook_image = cv2.imread(image_path)
original_image = notebook_image.copy() 

gray_image = cv2.cvtColor(notebook_image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray_image, 100, 200)

contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

largest_contour = max(contours, key=cv2.contourArea)

epsilon = 0.02 * cv2.arcLength(largest_contour, True)
approx = cv2.approxPolyDP(largest_contour, epsilon, True)

cv2.drawContours(notebook_image, [approx], -1, (0, 255, 0), 3)

if len(approx) == 3:
    shape_text = "Triangle"
elif len(approx) == 4:
    shape_text = "Rectangle"
elif len(approx) == 5:
    shape_text = "Pentagon"
else:
    shape_text = "Circle or Irregular"

font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(notebook_image, shape_text, (10, 30), font, 0.8, (255, 0, 0), 2, cv2.LINE_AA)

cv2.imshow("Contoured Image", notebook_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

과제 2

import cv2

faceCascade = cv2.CascadeClassifier("data/haarcascade_frontalface_default.xml")

cap = cv2.VideoCapture(0)  # 0번 카메라(기본 웹캠)을 사용합니다.

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

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

    for (x, y, w, h) in faces:
        face_roi = frame[y:y+h, x:x+w]
        face_roi = cv2.resize(face_roi, (w//30, h//30))  #
        face_roi = cv2.resize(face_roi, (w, h), interpolation=cv2.INTER_AREA)
        frame[y:y+h, x:x+w] = face_roi

    cv2.imshow('Face Detection', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

0개의 댓글