目次から探す
画像処理の応用
画像処理の応用では、特徴点検出とマッチング、顔検出と顔認識、動画処理などがあります。
これらの技術を使って、さらに高度な画像処理を行うことができます。
特徴点検出とマッチング
特徴点検出とは、画像の中から特徴的な点を見つけ出すことです。
これにより、画像間の類似度や物体の位置関係を求めることができます。
SIFT
SIFT(Scale-Invariant Feature Transform)
は、スケール不変な特徴点検出アルゴリズムです。
以下のコードは、SIFTを使って特徴点を検出し、画像に描画する例です。
import cv2
# 画像の読み込み
img = cv2.imread('sample.jpg', cv2.IMREAD_GRAYSCALE)
# SIFTのインスタンス生成
sift = cv2.SIFT_create()
# 特徴点の検出
keypoints = sift.detect(img, None)
# 特徴点の描画
img_with_keypoints = cv2.drawKeypoints(img, keypoints, None)
# 画像の表示
cv2.imshow('SIFT', img_with_keypoints)
cv2.waitKey(0)
cv2.destroyAllWindows()
ORB
ORB(Oriented FAST and Rotated BRIEF)
は、高速で回転不変な特徴点検出アルゴリズムです。
以下のコードは、ORBを使って特徴点を検出し、画像に描画する例です。
import cv2
# 画像の読み込み
img = cv2.imread('sample.jpg', cv2.IMREAD_GRAYSCALE)
# ORBのインスタンス生成
orb = cv2.ORB_create()
# 特徴点の検出
keypoints = orb.detect(img, None)
# 特徴点の描画
img_with_keypoints = cv2.drawKeypoints(img, keypoints, None)
# 画像の表示
cv2.imshow('ORB', img_with_keypoints)
cv2.waitKey(0)
cv2.destroyAllWindows()
顔検出と顔認識
顔検出は、画像中に存在する顔を検出する技術です。
顔認識は、検出された顔が誰の顔であるかを特定する技術です。
Haar Cascade
Haar Cascadeは、顔検出のためのアルゴリズムです。
以下のコードは、Haar Cascadeを使って顔を検出し、画像に矩形を描画する例です。
import cv2
# 画像の読み込み
img = cv2.imread('sample.jpg')
# グレースケールに変換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 顔検出用のカスケード分類器を読み込む
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 顔の検出
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 検出された顔に矩形を描画
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 5)
# 画像の表示
cv2.imshow('Face Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
DNNモジュールを使用した顔認識
DNN(Deep Neural Network)
モジュールを使用して、顔認識を行うことができます。
以下のコードは、DNNモジュールを使って顔認識を行い、認識された顔に名前を表示する例です。
import cv2
# 画像の読み込み
img = cv2.imread('sample.jpg')
# 顔検出用のカスケード分類器を読み込む
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 顔認識用のモデルを読み込む
model = cv2.dnn.readNetFromCaffe('deploy.prototxt', 'res10_300x300_ssd_iter_140000.caffemodel')
# 顔認識の処理
# 省略
# 認識された顔に名前を表示
# 省略
# 画像の表示
cv2.imshow('Face Recognition', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
動画処理
動画処理では、動画の読み込みと表示、動画の保存、動画のフレーム処理を行います。
動画の読み込みと表示
動画ファイルを読み込み、フレームごとに表示する方法は以下の通りです。
import cv2
# 動画ファイルの読み込み
cap = cv2.VideoCapture('sample.mp4')
# 動画のフレームごとの処理
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 画像の表示
cv2.imshow('Video', frame)
# キー入力待ち
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 終了処理
cap.release()
cv2.destroyAllWindows()
動画の保存
動画を保存する方法は以下の通りです。
import cv2
# 動画ファイルの読み込み
cap = cv2.VideoCapture('sample.mp4')
# 動画ファイルの保存設定
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 30.0, (640, 480))
# 動画のフレームごとの処理
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 画像の表示
cv2.imshow('Video', frame)
# 動画の保存
out.write(frame)
# キー入力待ち
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 終了処理
cap.release()
out.release()
cv2.destroyAllWindows()
動画のフレーム処理
動画のフレームごとに画像処理を行う方法は以下の通りです。
import cv2
# 動画ファイルの読み込み
cap = cv2.VideoCapture('sample.mp4')
# 動画のフレームごとの処理
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 画像処理
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 画像の表示
cv2.imshow('Video', gray)
# キー入力待ち
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 終了処理
cap.release()
cv2.destroyAllWindows()
これらの応用技術を組み合わせることで、さまざまな画像処理や動画処理を行うことができます。
次のページ機械学習と深層学習