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()