File size: 1,583 Bytes
57d49b0
 
 
 
 
fa6457e
57d49b0
 
 
 
 
6187307
57d49b0
 
 
 
fa6457e
 
 
 
6187307
fa6457e
 
 
 
 
 
 
 
 
 
 
 
 
 
6187307
 
fa6457e
6187307
fa6457e
 
57d49b0
6187307
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# pose_grid_overlay.py

import cv2
import mediapipe as mp
import numpy as np
import os

def draw_pose_on_grid(image_path: str, grid_size=(3, 3), save_path="outputs/pose_grid.jpg"):
    # 1. 이미지 불러오기
    image = cv2.imread(image_path)
    if image is None:
        raise FileNotFoundError(f"이미지를 불러올 수 없습니다: {image_path}")
    
    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    h, w, _ = image.shape

    # 2. 저장 경로 디렉토리 보장
    os.makedirs(os.path.dirname(save_path), exist_ok=True)

    # 3. 포즈 추론
    with mp.solutions.pose.Pose(static_image_mode=True, model_complexity=2) as pose_model:
        results = pose_model.process(image_rgb)

        # 4. 격자 그리기
        for i in range(1, grid_size[0]):
            x = int(w * i / grid_size[0])
            cv2.line(image, (x, 0), (x, h), (200, 200, 200), 1)
        for i in range(1, grid_size[1]):
            y = int(h * i / grid_size[1])
            cv2.line(image, (0, y), (w, y), (200, 200, 200), 1)

        # 5. 포즈 keypoints 그리기
        if results.pose_landmarks:
            for lm in results.pose_landmarks.landmark:
                cx, cy = int(lm.x * w), int(lm.y * h)
                if 0 <= cx < w and 0 <= cy < h:  # 이미지 영역 내부만 그리기
                    cv2.circle(image, (cx, cy), 5, (255, 0, 0), -1)
        else:
            raise RuntimeError("❌ 포즈를 감지할 수 없습니다. 인물이 뚜렷하게 나온 이미지를 사용해보세요.")

    # 6. 저장
    cv2.imwrite(save_path, image)