|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 538 KiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 586 KiB |
|
After Width: | Height: | Size: 333 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 482 KiB |
|
After Width: | Height: | Size: 363 KiB |
|
After Width: | Height: | Size: 162 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
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) |
||||||
|
|||||||
|
After Width: | Height: | Size: 487 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 109 KiB |