ishi720 / ferrisWheelRotate

観覧車の回転から、一周回る時間を求める
0 stars 0 forks source link

観覧車の写真が真っ正面になるように加工する #2

Open ishi720 opened 2 months ago

mizu0830 commented 2 months ago

ゴンドラ1個の場合 観覧車の写真を真っ正面からの視点に加工するためには、以下の手順を試すと良いでしょう:

1. 画像の中央を取得 1.画像の中心座標を求める:

# 例: Pythonで画像の中央座標を求める
from PIL import Image

image = Image.open('ferris_wheel.jpg')
width, height = image.size
center_x, center_y = width // 2, height // 2

2. ゴンドラの検出 1.画像処理ライブラリを使用:

import cv2

image = cv2.imread('ferris_wheel.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# ここでゴンドラを検出するための適切な手法を選択(例: 特徴点検出、テンプレートマッチングなど)

2.テンプレートマッチング:

template = cv2.imread('gondola_template.jpg', 0)
res = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

3. 画像の変形(射影変換)

  1. 透視変換を使用:
    • ゴンドラの位置がわかったら、画像を透視変換して観覧車が正面から見えるようにします。
import numpy as np

# ゴンドラの位置を元に変換行列を計算
src_pts = np.float32([[x1, y1], [x2, y2], [x3, y3], [x4, y4]])
dst_pts = np.float32([[0, 0], [width, 0], [width, height], [0, height]])
M = cv2.getPerspectiveTransform(src_pts, dst_pts)
warped_image = cv2.warpPerspective(image, M, (width, height))

2.調整と確認:

注意点

mizu0830 commented 2 months ago

複数のゴンドラがある場合の手順

  1. ゴンドラの検出とマッチング
    • テンプレートマッチングを使用する場合、テンプレート画像が複数のゴンドラに対応できるようにするために、複数のテンプレートやスケーリングを考慮する必要があります。
import cv2

# ゴンドラのテンプレートを読み込む
template = cv2.imread('gondola_template.jpg', 0)
w, h = template.shape[::-1]

# テンプレートマッチング
res = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where(res >= threshold)
points = []
for pt in zip(*loc[::-1]):
    points.append((pt[0], pt[1]))

2.ゴンドラ位置の検出

# 複数のゴンドラの位置から円を検出
circle_center = np.mean(points, axis=0)

3.画像の変形(射影変換)

# ゴンドラの検出位置を元に変換行列を計算
src_pts = np.float32(points)
dst_pts = np.float32([[0, 0], [width, 0], [width, height], [0, height]])
M = cv2.getPerspectiveTransform(src_pts, dst_pts)
warped_image = cv2.warpPerspective(image, M, (width, height))

4.補正と調整

注意点

この手順を用いることで、複数のゴンドラが含まれる観覧車の写真を真っ正面から見たように加工することが可能です。実際の作業には画像処理やコンピュータビジョンの知識が必要ですので、実装時には具体的な要件に応じた調整を行うことをお勧めします。