|
Before Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 586 KiB |
|
Before Width: | Height: | Size: 333 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 482 KiB |
|
Before Width: | Height: | Size: 363 KiB |
|
Before Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 12 KiB |
@ -1,45 +1,28 @@ |
|||||||
# 実験課題7 |
# 実験課題7 |
||||||
# 3.7 膨張・収縮(白黒の2値画像に対する処理へ修正版) |
# 3.7 膨張・収縮 |
||||||
|
|
||||||
import cv2 |
import cv2 |
||||||
import numpy as np |
import numpy as np |
||||||
|
|
||||||
# 画像の読み込み |
|
||||||
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 not None: |
||||||
print("画像を読み込めませんでした。ファイルパスを確認してください。") |
|
||||||
else: |
|
||||||
# 3.6の処理:HSV変換 |
|
||||||
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) |
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) |
||||||
|
|
||||||
# 肌色の範囲を指定 |
|
||||||
lower_skin = np.array([0, 20, 70]) |
lower_skin = np.array([0, 20, 70]) |
||||||
upper_skin = np.array([20, 255, 255]) |
upper_skin = np.array([20, 255, 255]) |
||||||
|
|
||||||
# inRangeで作成されるこの画像が、対象が白(255)で背景が黒(0)の「2値画像(白黒画像)」です |
# 2値画像(白黒画像)を作成 |
||||||
mask_img = cv2.inRange(hsv_img, lower_skin, upper_skin) |
mask_img = cv2.inRange(hsv_img, lower_skin, upper_skin) |
||||||
|
|
||||||
# --- 膨張・収縮のための構造要素(カーネル)の定義 --- |
kernel = np.ones((5, 5), np.uint8) |
||||||
kernel = np.ones((3, 3), np.uint8) |
|
||||||
|
|
||||||
# --- ① 収縮 3回 → 膨張 3回(オープニング処理) --- |
# オープニング処理 (収縮 -> 膨張) [Erode to Dilate] |
||||||
# 処理の対象を mask_img(白黒画像) に変更 |
|
||||||
eroded_first = cv2.erode(mask_img, kernel, iterations=3) |
eroded_first = cv2.erode(mask_img, kernel, iterations=3) |
||||||
seq_opening = cv2.dilate(eroded_first, kernel, iterations=3) |
seq_opening = cv2.dilate(eroded_first, kernel, iterations=3) |
||||||
|
cv2.imwrite('3_7_e2d.jpg', seq_opening) |
||||||
|
|
||||||
# --- ② 膨張 3回 → 収縮 3回(クロージング処理) --- |
# クロージング処理 (膨張 -> 収縮) [Dilate to Erode] |
||||||
# 処理の対象を mask_img(白黒画像) に変更 |
|
||||||
dilated_first = cv2.dilate(mask_img, kernel, iterations=3) |
dilated_first = cv2.dilate(mask_img, kernel, iterations=3) |
||||||
seq_closing = cv2.erode(dilated_first, kernel, iterations=3) |
seq_closing = cv2.erode(dilated_first, kernel, iterations=3) |
||||||
|
cv2.imwrite('3_7_d2e.jpg', seq_closing) |
||||||
# --- 結果の表示 --- |
|
||||||
# 白黒のマスク画像がどのように変化するかを確認します |
|
||||||
cv2.imshow('1. Original Mask (Black & White)', mask_img) |
|
||||||
cv2.imshow('2. Erode 3 -> Dilate 3', seq_opening) |
|
||||||
cv2.imshow('3. Dilate 3 -> Erode 3', seq_closing) |
|
||||||
|
|
||||||
# キー入力待ち |
|
||||||
cv2.waitKey(0) |
|
||||||
cv2.destroyAllWindows() |
|
||||||