- 16日目(1/2)【課題7】画像から顔を検出しよう
- 16日目(2/2)【課題8】画像から目を検出しよう
- 17日目(1/1)【課題9】2つの画像から一致する部分検出しよう
- 18日目(1/1)【課題10】2つの画像の特徴点で一致具合を見てみよう
16日目(1/2)
【課題7】画像から顔を検出しよう
■プレビュー

検出あり

検出なし
■ソースコード(face_detection.py)
import sys
import cv2
if len(sys.argv)<2:
print('表示したいファイル名を指定してください。')
sys.exit()
file = sys.argv[1]
try:
img = cv2.imread(file)
if img is None:
raise ValueError('ファイルが見つかりません。')
RESIZE_WIDTH = 800
img_height = img.shape[0]
img_width = img.shape[1]
if img_width > RESIZE_WIDTH:
img_resize = cv2.resize(img, (RESIZE_WIDTH, int(RESIZE_WIDTH / img_width * img_height)))
else:
img_resize = img
img_gray = cv2.cvtColor(img_resize, cv2.COLOR_RGB2GRAY)
CASCADE_FILE = 'haarcascade_frontalface_alt.xml'
#CASCADE_FILE = 'haarcascade_eye.xml'
haar_cascade = cv2.CascadeClassifier(CASCADE_FILE)
detection = haar_cascade.detectMultiScale(img_resize, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))
if len(detection) > 0:
for rect in detection:
cv2.rectangle(img_resize, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0, 255), thickness=2)
else:
cv2.putText(img_resize, 'no match found', (20, 50), cv2.FONT_HERSHEY_COMPLEX, 1.0, (0, 0, 255), 2)
cv2.imshow(file, img_resize)
cv2.waitKey(0)
cv2.destroyAllWindows()
except ValueError as e:
print(e)
except:
import traceback
traceback.print_exc()
16日目(2/2)
【課題8】画像から目を検出しよう
■プレビュー
■ソースコード(face_detection.py)
import sys
import cv2
if len(sys.argv)<2:
print('表示したいファイル名を指定してください。')
sys.exit()
file = sys.argv[1]
try:
img = cv2.imread(file)
if img is None:
raise ValueError('ファイルが見つかりません。')
RESIZE_WIDTH = 800
img_height = img.shape[0]
img_width = img.shape[1]
if img_width > RESIZE_WIDTH:
img_resize = cv2.resize(img, (RESIZE_WIDTH, int(RESIZE_WIDTH / img_width * img_height)))
else:
img_resize = img
img_gray = cv2.cvtColor(img_resize, cv2.COLOR_RGB2GRAY)
#CASCADE_FILE = 'haarcascade_frontalface_alt.xml'
CASCADE_FILE = 'haarcascade_eye.xml'
haar_cascade = cv2.CascadeClassifier(CASCADE_FILE)
detection = haar_cascade.detectMultiScale(img_resize, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))
if len(detection) > 0:
for rect in detection:
cv2.rectangle(img_resize, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0, 255), thickness=2)
else:
cv2.putText(img_resize, 'no match found', (20, 50), cv2.FONT_HERSHEY_COMPLEX, 1.0, (0, 0, 255), 2)
cv2.imshow(file, img_resize)
cv2.waitKey(0)
cv2.destroyAllWindows()
except ValueError as e:
print(e)
except:
import traceback
traceback.print_exc()
17日目(1/1)
【課題9】2つの画像から一致する部分検出しよう
■プレビュー

1つ目の結果

2つ目の結果
■ソースコード(template_matching.py)
import sys
import cv2
if len(sys.argv)<3:
print('検索対象画像ファイルとテンプレート画像ファイルの2つ指定してください。')
sys.exit()
file = sys.argv[1]
file_templ = sys.argv[2]
try:
img = cv2.imread(file)
img_template = cv2.imread(file_templ)
if (img is None) or (img_template is None):
raise ValueError('検索ファイルが見つかりません。')
result_match = cv2.matchTemplate(img, img_template, cv2.TM_CCOEFF_NORMED)
cv2.imshow('Template Matching', result_match)
cv2.waitKey(0)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result_match)
top_left = max_loc
bottom_right = (top_left[0] + img_template.shape[1], top_left[1] + img_template.shape[0])
cv2.rectangle(img, top_left, bottom_right, (0, 0, 255), 2)
cv2.imshow(file, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
except ValueError as e:
print(e)
except:
import traceback
traceback.print_exc()
18日目(1/1)
【課題10】2つの画像の特徴点で一致具合を見てみよう
■プレビュー

1つ目の結果

2つ目の結果

3つ目の結果
■ソースコード(feature_matching.py)
import sys
import cv2
if len(sys.argv)<3:
print('特徴量検出するファイルを2つ指定してください。')
sys.exit()
file1 = sys.argv[1]
file2 = sys.argv[2]
try:
img1 = cv2.imread(file1)
img2 = cv2.imread(file2)
if (img1 is None) or (img2 is None):
raise ValueError('特徴量検出ファイルが見つかりません。')
detector = cv2.AKAZE_create()
point1, desc1 = detector.detectAndCompute(img1, None)
point2, desc2 = detector.detectAndCompute(img2, None)
matcher = cv2.BFMatcher(cv2.NORM_HAMMING, True)
matches = matcher.match(desc1, desc2)
img_match = cv2.drawMatches(img1, point1, img2, point2, matches, None, flags=2)
cv2.imshow(file1+'<-->'+file2, img_match)
cv2.waitKey(0)
cv2.destroyAllWindows()
except ValueError as e:
print(e)
except:
import traceback
traceback.print_exc()