ROKEY

[20250207] 파이썬 프로그래밍 - 딥러닝 파이썬 패키지 3

kode-daks 2025. 2. 9. 23:34

수업 목표

- seaborn 패키지 내 모듈의 기본 함수를 사용할 수 있다.

- opencv 모듈의 함수를 사용하여 이미지를 로드 및 표시할 수 있다.

- opencv 모듈의 다양한 함수를 사용할 수 있다.

 

 

1. seaborn

- 파이썬의 데이터 시각화 라이브러리

- matplotlib 위에서 동작

- 간결한 문법과 고급 시각화 기능 제공

- import seaborn as sns; import matplotlib.pyplot as plt; import pandas as pd

 

산점도

# 산점도 : 두 변수 간의 관계를 시각적으로 표현
import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")
sns.set_theme(style="whitegrid", palette="muted")
sns.scatterplot(data=iris,
                x="sepal_length",
                y="sepal_width",
                hue="species") # hue : 색상을 이용한 범주 표현
plt.title("Scatter Plot Example")
plt.show()

 

선형 회귀선

# 선형 회귀선 : 데이터의 선형적 관계를 시각적으로 표현
import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")
sns.set_theme(style="whitegrid")
sns.lmplot(data=iris,
           x="sepal_length",
           y="sepal_width",
           hue="species",
           height=6)
plt.title("Linear Regression Example")
plt.show()

 

히스토그램

# 히스토그램 : 데이터의 분포를 확인하는 데 유용
import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")
sns.set_theme(style="whitegrid")
sns.histplot(data=iris,
           x="sepal_length",
           hue="species",
           kde=True) # 분포 곡선 표시 
plt.title("Histogram Example")
plt.show()

 

박스 플롯

# 박스 플랏 : 데이터 분포와 이상치를 시각적으로 분석
import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")
sns.set_theme(style="whitegrid")
ax = sns.boxplot(data=iris,
                 x="species",
                 y="sepal_length")
median = iris[iris["species"] == "setosa"]]["sepal_length"].median()
ax.text(0, median, f"{median:.2f}", color="red", fontsize=12_
plt.title("Box plot Example")
plt.show()

 

바이올린 플랏

# 바이올린 플랏 : 상자 그림과 커널밀도 추정이 결합된 형태
import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")
sns.set_theme(style="whitegrid")
sns.violinplot(data=iris,
           x="species",
           y="sepal_length",
           inner="quart") # inner: 내부에 quartile 표시
plt.title("Violin plot Example")
plt.show()

 

페어 플랏

# 페어 플랏 : 여러 변수 간의 관계를 한 번에 확인
import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")
sns.set_theme(style="whitegrid")
sns.pairplot(iris, hue="species")
plt.show()

 

기타

- 스타일 커스터마이징 : set_theme(style=스타일, palette=색상)

- 그래프 크기 조정 : set_context(context, rc={"figure.figsize":(가로, 세로)})

    * context : paper, notebook, talk, poster 중 선택

    * rc : 선택 사항, 사전 설정된 seaborn 컨텍스트 값을 재정의 하기 위한 매개변수 매핑

- 색상 팔레트 변경 : set_palette(색상테마)

 

복합 그래프

import seaborn as sns
import matplotlib.pyplot as plt


iris = sns.load_dataset("iris")
# species 별 서브플롯 생성, height: 높이 4      aspect: 가로 세로 비율 1:1
g = sns.FacetGrid(iris, col="species", height=4, aspect=1) 
g.map_dataframe(sns.histplot, x="sepal_length", kde=True) # 원하는 그래프 적용
g.set_titles(col_template="{col_name}") # 각 플롯에 제목 추가
plt.show()

 

2. opencv (OPEN source Computer Vision)

- 실시간 컴퓨터 비전을 위한 라이브러리

- Python을 포함한 여러 프로그래밍 언어에서 사용 가능

- 다양한 이미지 및 영상 처리 기능 제공

- pip install opencv-python

- import cv2

import cv2


image = cv2.imread('./example.jpeg') # 이미지 불러오기
cv2.imshow("loaded Image", image) # 이미지 화면 띄우기
# 창 유지
cv2.waitKey(0) 
cv2.destroyAllWindows()

# 사이즈 변환
resized = cv2.resize(image, (300,300))

# 회색
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 회전
(h,w) = image.shape[:2]
center = (w//2, h//2)
M = cv2.getRotationMatrix2D(center, angle=45, scale=1.0)
rotated = cv2.warpAffine(image, M, dsize=(w,h)) #0,0은 src와 같은 크기

# 엣지 검출
edges = cv2.Canny(image, 100, 200) #threshold1 : 엣지 검출 최소 / threshold2 : 엣지 검출 최대

# 블러 처리
# ksize:가우시안 커널 크기(부드러움 정도)
# sigmaX,Y: x,y 방향의 가우시안 표준편차
blurred = cv2.GaussianBlur(image, ksize=(15, 15), sigmaX=0, sigmaY=0)

 

얼굴 디텍하기

import cv2
import matplotlib.pyplot as plt


image = cv2.imread("./example.jpeg")
face_path = cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(face_path)
# 그레이스케일 변환
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 얼굴 검출
# scaleFactor: n배씩 이미지 크기를 줄여가면서 검출
# minNeighbors : 검출된 객체 주변의 최소 이웃 개수, 값이 클수록 오탐색 감소
# minSize: 검출할 객체의 최소 크기 
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30,30))

for (x,y,w,h) in faces:
    cv2.rectangle(image, (x,y), (x+w,y+h), (225,0,0), 2)
    
cv2.imshow("loaded Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

비디오 다루기

import cv2

cap = cv2.VideoCapture("path") #동영상에서 이미지 캡쳐

while True:
    ret, frame = cap.read() # ret: 영상 읽음 여부 True, False / frame: 이미지
    if not ret:
        break
    
    edges = cv2.Canny(frame, 100, 200) # 엣지 검출 등 이미지 처리
    
    cv2.imshow("Edge Detection", edges)
    
    if cv2.waitKey(1) == ord("q"): #키 입력을 1ms만큼 대기 후, q가 입력될 때까지
        break
    
cap.release() #동영상 종료후 사용한 메모리 반환
cv2.destroyAllWindows() # 윈도우 종료

 

녹색 필터링

import cv2
import numpy as np

image = cv2.imread("./tree.jpg")


green_lower = np.array([5, 100, 100])
green_upper = np.array([105, 255, 255])

hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, green_lower, green_upper)
# src:입력행렬, lowerb:하한값 행렬 또는 스칼라, upperb:상한값 행렬 또는 스칼라
# dst: 입력 영상과 같은 크기의 마스크 영상
result = cv2.bitwise_and(image, image, mask=mask)
# 이미지에서 특정 영역을 추출하기 위해 이미지 비트 연산 수행

cv2.imshow('Green Color Filtering', result)
cv2.waitKey(0)
cv2.destroyAllWindows()