画像を取りました.

main
KoyoNoguchi 1 week ago
parent cfe0c1a7dd
commit 3da995a6e4
  1. BIN
      3_10_labeled.png
  2. BIN
      3_10_moving.png
  3. BIN
      3_11_tracking.png
  4. BIN
      3_1_resize.png
  5. 2
      3_1_resize_rotate.py
  6. BIN
      3_1_rotate.png
  7. BIN
      3_2_grayscale.png
  8. BIN
      3_3_binarize.png
  9. BIN
      3_4_roi.png
  10. 8
      3_4_roi.py
  11. BIN
      3_5_canny.png
  12. BIN
      3_5_laplacian.png
  13. BIN
      3_5_sobel.png
  14. 2
      3_6_color_extraction.py
  15. BIN
      3_6_extract_skin.png
  16. BIN
      3_6_skin_mask.png
  17. BIN
      3_7_d2e.png
  18. BIN
      3_7_e2d.png
  19. 35
      3_7_morphology.py
  20. BIN
      3_9_face_mask.png
  21. BIN
      sample.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

@ -14,6 +14,8 @@ else:
# 元画像の高さと幅を取得 # 元画像の高さと幅を取得
height, width = img.shape[:2] height, width = img.shape[:2]
print(f"{height}x{width}")
# 縦横を1/2のサイズに計算 # 縦横を1/2のサイズに計算
new_width = width // 2 new_width = width // 2
new_height = height // 2 new_height = height // 2

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

@ -15,10 +15,10 @@ else:
# --- ROI(関心領域)の指定 --- # --- ROI(関心領域)の指定 ---
# 切り出す領域の開始位置と終了位置を計算(例として、画像の中心部分を切り出し) # 切り出す領域の開始位置と終了位置を計算(例として、画像の中心部分を切り出し)
start_y = height // 4 start_y = 248
end_y = height * 3 // 4 end_y = 361
start_x = width // 4 start_x = 67
end_x = width * 3 // 4 end_x = 208
# --- 画像の切り出し --- # --- 画像の切り出し ---
# NumPy配列のスライス機能を使用して、指定した範囲を切り出す # NumPy配列のスライス機能を使用して、指定した範囲を切り出す

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

@ -18,7 +18,7 @@ else:
# --- 肌色の範囲を指定 (HSV) --- # --- 肌色の範囲を指定 (HSV) ---
# OpenCVにおけるH(色相)は0〜179、S(彩度)とV(明度)は0〜255 # OpenCVにおけるH(色相)は0〜179、S(彩度)とV(明度)は0〜255
# ※画像の色合いや照明条件に合わせて微調整が必要です # ※画像の色合いや照明条件に合わせて微調整が必要です
lower_skin = np.array([0, 0, 70]) # 下限値 (H, S, V) lower_skin = np.array([0, 20, 70]) # 下限値 (H, S, V)
upper_skin = np.array([20, 255, 255]) # 上限値 (H, S, V) upper_skin = np.array([20, 255, 255]) # 上限値 (H, S, V)
# --- マスク画像の作成 --- # --- マスク画像の作成 ---

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@ -1,43 +1,44 @@
# 実験課題7 # 実験課題7
# 3.7 膨張・収縮 # 3.7 膨張・収縮(白黒の2値画像に対する処理へ修正版)
import cv2 import cv2
import numpy as np import numpy as np
# 3.6の画像(色領域を抽出した画像)を準備するための前処理 # 画像の読み込み
image_path = 'person.jpg' image_path = 'person.jpg'
img = cv2.imread(image_path) img = cv2.imread(image_path)
if img is None: if img is None:
print("画像を読み込めませんでした。ファイルパスを確認してください。") print("画像を読み込めませんでした。ファイルパスを確認してください。")
else: else:
# 3.6の処理(肌色領域の抽出)を再現 # 3.6の処理:HSV変換
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_skin = np.array([0, 0, 70])
# 肌色の範囲を指定
lower_skin = np.array([0, 20, 70])
upper_skin = np.array([20, 255, 255]) upper_skin = np.array([20, 255, 255])
skin_mask = cv2.inRange(hsv_img, lower_skin, upper_skin)
extracted_img = cv2.bitwise_and(img, img, mask=skin_mask) # inRangeで作成されるこの画像が、対象が白(255)で背景が黒(0)の「2値画像(白黒画像)」です
mask_img = cv2.inRange(hsv_img, lower_skin, upper_skin)
# --- 膨張・収縮のための構造要素(カーネル)の定義 --- # --- 膨張・収縮のための構造要素(カーネル)の定義 ---
# 5x5の正方形のカーネルを作成 kernel = np.ones((3, 3), np.uint8)
kernel = np.ones((5, 5), np.uint8)
# --- ① 収縮 3回 → 膨張 3回(オープニング処理) --- # --- ① 収縮 3回 → 膨張 3回(オープニング処理) ---
# まず収縮(erode)を3回実行 # 処理の対象を mask_img(白黒画像) に変更
eroded_first = cv2.erode(extracted_img, kernel, iterations=3) eroded_first = cv2.erode(mask_img, kernel, iterations=3)
# その後、膨張(dilate)を3回実行
seq_opening = cv2.dilate(eroded_first, kernel, iterations=3) seq_opening = cv2.dilate(eroded_first, kernel, iterations=3)
# --- ② 膨張 3回 → 収縮 3回(クロージング処理) --- # --- ② 膨張 3回 → 収縮 3回(クロージング処理) ---
# まず膨張(dilate)を3回実行 # 処理の対象を mask_img(白黒画像) に変更
dilated_first = cv2.dilate(extracted_img, kernel, iterations=3) dilated_first = cv2.dilate(mask_img, kernel, iterations=3)
# その後、収縮(erode)を3回実行
seq_closing = cv2.erode(dilated_first, kernel, iterations=3) seq_closing = cv2.erode(dilated_first, kernel, iterations=3)
# --- 結果の表示 --- # --- 結果の表示 ---
cv2.imshow('Original Extracted Image (3.6)', extracted_img) # 白黒のマスク画像がどのように変化するかを確認します
cv2.imshow('Sequence 1: Erosion 3 -> Dilation 3', seq_opening) cv2.imshow('1. Original Mask (Black & White)', mask_img)
cv2.imshow('Sequence 2: Dilation 3 -> Erosion 3', seq_closing) cv2.imshow('2. Erode 3 -> Dilate 3', seq_opening)
cv2.imshow('3. Dilate 3 -> Erode 3', seq_closing)
# キー入力待ち # キー入力待ち
cv2.waitKey(0) cv2.waitKey(0)

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 109 KiB

Loading…
Cancel
Save