OpenCV

AIフレームワーク | IT用語集

この用語をシェア

概要

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)アプリケーション
  • ロボティクス・制御システム
  • セキュリティ・監視システム

メリット・デメリット

メリット

  • 豊富な機能と高い性能
  • 多言語・多プラットフォーム対応
  • 無料で商用利用可能
  • 活発なコミュニティサポート
  • 豊富な学習資料
  • 産業界での実績

デメリット

  • 学習コストが高い
  • ドキュメントが膨大
  • メモリ使用量が多い
  • バージョン間での互換性問題
  • 最新のディープラーニング手法は限定的

関連Webサイト

この用語についてもっと詳しく

OpenCVに関するご質問や、システム導入のご相談など、お気軽にお問い合わせください。