この用語をシェア
概要
OpenCV(Open Source Computer Vision Library)は、コンピュータビジョンのためのオープンソースライブラリです。画像処理、動画処理、機械学習機能を提供し、リアルタイム画像処理アプリケーションの開発に広く利用されています。Python、C++、Java、C#など多くの言語をサポートし、研究から商用アプリケーションまで幅広い分野で活用されています。
詳細説明
主な特徴
- 包括的な機能:2500以上の最適化されたアルゴリズム
- 多言語対応:Python、C++、Java、C#、MATLABなど
- クロスプラットフォーム:Windows、Linux、macOS、Android、iOS
- リアルタイム処理:高速な画像・動画処理
- 機械学習統合:分類、回帰、クラスタリング機能
- 豊富なツール:GUI作成、画像I/O、動画処理
主要モジュール
- core:基本的なデータ構造と関数
- imgproc:画像処理関数
- imgcodecs:画像読み込み・保存
- videoio:動画読み込み・保存
- highgui:GUI関数
- ml:機械学習アルゴリズム
- objdetect:物体検出
- features2d:特徴点検出
使用例
基本的な画像処理
import cv2
import numpy as np
# 画像の読み込み
image = cv2.imread('sample.jpg')
# グレースケール変換
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# ガウシアンブラー
blurred = cv2.GaussianBlur(gray, (15, 15), 0)
# エッジ検出
edges = cv2.Canny(blurred, 50, 150)
# 画像の表示
cv2.imshow('Original', image)
cv2.imshow('Gray', gray)
cv2.imshow('Blurred', blurred)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 画像の保存
cv2.imwrite('processed_image.jpg', edges)
リアルタイム動画処理
import cv2
# Webカメラからの入力
cap = cv2.VideoCapture(0)
# 動画のプロパティ設定
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while True:
# フレームの読み込み
ret, frame = cap.read()
if not ret:
break
# HSV色空間に変換
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 青色の範囲を定義
lower_blue = np.array([110, 50, 50])
upper_blue = np.array([130, 255, 255])
# 青色のマスクを作成
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# マスクを適用
result = cv2.bitwise_and(frame, frame, mask=mask)
# 結果を表示
cv2.imshow('Original', frame)
cv2.imshow('Mask', mask)
cv2.imshow('Result', result)
# 'q'キーで終了
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# リソースの解放
cap.release()
cv2.destroyAllWindows()
物体検出
import cv2
# 事前学習済みのカスケード分類器を読み込み
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
# 画像の読み込み
img = cv2.imread('face_image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 顔検出
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
# 顔の領域を矩形で囲む
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 顔の領域内で目を検出
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
# 結果の表示
cv2.imshow('Face Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
特徴点検出とマッチング
import cv2
import numpy as np
# 画像の読み込み
img1 = cv2.imread('object.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('scene.jpg', cv2.IMREAD_GRAYSCALE)
# ORB特徴点検出器の作成
orb = cv2.ORB_create()
# 特徴点と記述子の検出
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
# BFMatcher(Brute Force Matcher)の作成
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
# 特徴点のマッチング
matches = bf.match(des1, des2)
# 距離によるソート
matches = sorted(matches, key=lambda x: x.distance)
# マッチング結果の描画
img_matches = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
# 結果の表示
cv2.imshow('Matches', img_matches)
cv2.waitKey(0)
cv2.destroyAllWindows()
関連技術
- NumPy:数値計算とアレイ処理
- PIL/Pillow:Python画像処理ライブラリ
- scikit-image:画像処理のscikit-learn
- MediaPipe:リアルタイム知覚パイプライン
- CUDA:GPU加速(OpenCV with CUDA)
- TensorFlow/PyTorch:深層学習との統合
適用分野
- 顔認識・認証システム
- 物体検出・追跡
- 品質検査・欠陥検出
- 医療画像診断
- 自動運転システム
- 拡張現実(AR)アプリケーション
- ロボティクス・制御システム
- セキュリティ・監視システム
メリット・デメリット
メリット
- 豊富な機能と高い性能
- 多言語・多プラットフォーム対応
- 無料で商用利用可能
- 活発なコミュニティサポート
- 豊富な学習資料
- 産業界での実績
デメリット
- 学習コストが高い
- ドキュメントが膨大
- メモリ使用量が多い
- バージョン間での互換性問題
- 最新のディープラーニング手法は限定的