opencvopencvを使い始める


備考

このセクションでは、opencvの概要と、なぜ開発者がそれを使いたいのかを概説します。

opencv内の大きなテーマについても触れ、関連するトピックにリンクしてください。 opencvのドキュメンテーションは新しいので、これらの関連トピックの初期バージョンを作成する必要があります。

バージョン

OpenCV 3

バージョン発売日
3.2 2016-12-23
3.1 2015-12-18
3.0 2015年06月03日
3.0 RC1 2015-04-23
3.0ベータ 2014-11-07
3.0アルファ 2014-08-21

OpenCV 2

バージョン発売日
2.4.13 2016年5月19日
2.4.12 2015-07-30
2.4.11 2015-02-25
2.4.10 2014-10-01
2.4.9 2014-04-14
2.3.1 2011-08-17
2.3.0 2011年7月4日
2.2.0 2010-12-05
2.1.0 2010-04-06
2.0.0 2009-10-01
1.0.0 2006-10-19

ソースからOpenCVをビルドしてインストールする

これは、ソースからDebianベースのLinuxシステムにOpenCV 3をインストールするためのステップバイステップのガイドです。これらの手順は、他のディストリビューションでも同じままでなければなりません。ビルド用のパッケージをインストールするときは、関連するパッケージマネージャコマンドを置き換えてください。

注:時間を浪費したり端末を嫌う気がしない場合は、SynapticのパッケージマネージャGUIからOpenCVをインストールすることができます。しかし、これらのライブラリは時代遅れです。

ビルドの準備

端末で以下のコマンドを発行し、必要なパッケージをインストールします。

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config \
                     libavcodec-dev libavformat-dev libswscale-dev
 

次のパッケージはオプションです。

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev \
                     libpng-devlibtiff-dev libjasper-dev libdc1394-22-dev
 

次のコマンドを発行してOpenCVソースコードを取得し、ビルドを準備します。

mkdir ~/src
cd ~/src
git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build && cd build
 

ビルドとインストール

ビルドには例が含まれていますが、自由に削除してください。また、他のフラグを設定して、適切と思われるようにビルドをカスタマイズすることも自由です。

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D INSTALL_C_EXAMPLES=ON ..
 

CMakeがエラーやライブラリの不足を報告しなかった場合は、ビルドを続けます。

make -j$(nproc)
 

エラーが発生しなかった場合、OpenCVをシステムにインストールすることができます:

sudo make install
 

OpenCVがあなたのシステムで利用できるようになりました。次の行を使用して、OpenCVがインストールされている場所とインストールされているライブラリを知ることができます。

pkg-config --cflags opencv  # get the include path (-I)
pkg-config --libs opencv    # get the libraries path (-L) and the libraries (-l)
 

テストインストール

最初にC ++の例をビルドします。

cd ~/src/opencv/samples
cmake .
make
 

エラーが発生しなかった場合は、任意のサンプルを実行します。

./cpp/cpp-example-edge
 

サンプルが実行されると、C ++ライブラリが適切にインストールされます。

次に、Pythonバインディングをテストします。

python
>> import cv2
>> print cv2.__version__
 

これらのコマンドがOpenCVをインポートし、正しいバージョンを印刷する場合、Pythonバインディングが正しくインストールされています。

Congrats、あなたはOpenCVをビルドしてインストールしました。ハッピープログラミング!

Macの場合はこちらを参照してください。Mac OS XでのOpenCVのインストール

ウェブカメラから画像を取得する

Java、C / C ++、およびPythonでOpenCVのVideoCaptureクラスを使用して、Webカメラから取得したライブビデオフィードを表示します。

Java

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.videoio.VideoCapture;
 
public class Camera {
    public static void main(String[] args) {
        // Load Native Library
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        // image container object
        Mat imageArray = new Mat();
        // Video device acces
        VideoCapture videoDevice = new VideoCapture();
        // 0:Start default video device 1,2 etc video device id
        videoDevice.open(0);
        // is contected
        if (videoDevice.isOpened()) {
        // Get frame from camera
            videoDevice.read(imageArray);
            // image array
            System.out.println(imageArray.toString());
            // Release video device
            videoDevice.release();
        } else {
            System.out.println("Error.");
        }
    }
}
 

C ++

#include "opencv2/opencv.hpp"
#include "iostream"

int main(int, char**) {
    // open the first webcam plugged in the computer
    cv::VideoCapture camera(0);
    if (!camera.isOpened()) {
        std::cerr << "ERROR: Could not open camera" << std::endl;
        return 1;
    }

    // create a window to display the images from the webcam
    cv::namedWindow("Webcam", CV_WINDOW_AUTOSIZE);

    // this will contain the image from the webcam
    cv::Mat frame;
        
    // capture the next frame from the webcam
    camera >> frame;
    
    // display the frame until you press a key
    while (1) {
        // show the image on the window
        cv::imshow("Webcam", frame);
        // wait (10ms) for a key to be pressed
        if (cv::waitKey(10) >= 0)
            break;
    }
    return 0;
}
 

Python

import numpy as np
import cv2

# Video source - can be camera index number given by 'ls /dev/video*
# or can be a video file, e.g. '~/Video.avi'
cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
 

WindowsでのOpenCV 3.1入門

WindowsにOpenCV 3.1.0をインストールして起動します。 WindowsにOpenCVをインストールするには、2つの方法があります。 1つはインストーラをダウンロードして実行することです。他のものはソースからビルドすることです。

これはOpenCVをインストールして開始する最も簡単な方法です。 OpenCVはビルド前のバイナリをWindowsにインストールするためのものです 。ダウンロードが完了したら、抽出して選択したパスにインストールします。

ProTip: OpenCVパスにスペースが含まれていないことを確認してください。したがって、C:\またはD:\ rootディレクトリにインストールするだけの方がよいでしょう

上記の方法の問題は、opencv_contribモジュールを使用できないことです。また、サードパーティのツールやライブラリはすべて付属していません。あなたがこれらのすべてを使いたいならば、そのまま続けてください。

ソースからOpenCVをインストールするための最小限の最小限度について説明します。より高度なものについては、 ここを参照してください

  • CMakeをインストールします。
  • いくつかのディレクトリにはスペースを持たないOpenCVソースをhttps://github.com/Itseez/opencv.gitからクローンしてください 。それを "OpenCVdir"と呼んでいます。 ここに画像の説明を入力
  • 次に、CMake GUIを開き、ソースディレクトリ(OpenCVdir)をSourcesメニューに追加し、ビルドメニューへのディレクトリをビルドします。 ヒント:ビルドディレクトリがない場合は、opencvフォルダにディレクトリを作成します。 ここに画像の説明を入力
  • [構成]をクリックし、Visual Studioコンパイラのバージョンを選択します。私はVisual Studio 2013 Professional 32ビットを持っていたので、私はVisual Studio 12コンパイラを選択しました。 ここに画像の説明を入力

ヒント:ここからVisual Studio 2013 Professionalをダウンロードできます。サインイン後30日間の試用+ 90日間の延長トレイルが付属しています。

  • Finishを押すと、CMakeはすべてのパッケージを自動的に読み込みます。パッケージを追加または削除できます。 [設定]をもう一度押します。
  • 余分なopencv_contribモジュールを使ってビルドする場合は、 ここからダウンロードする必要があります 。次に、それらを抽出し、以下に示すようにopencv_contrib / modulesディレクトリをCMakeに追加します。 ここに画像の説明を入力
  • もう一度Configureを押し、次にGenerateを押します。
  • CMakeを閉じます。 your_opencv \ buildフォルダに移動し、 'OpenCV.sln'ファイルを開きます。 - Visual Studioが開きます。今、両方のデバッグでそれを実行しますここに画像の説明を入力モードとリリースここに画像の説明を入力モード。
  • Visual Studioの右上にあるソリューションエクスプローラで、INSTALL projectを選択してビルドします。 ここに画像の説明を入力

ハレイ!あなたのOpenCVをお楽しみください。

OpenCVインクルードディレクトリを環境変数のPATH変数に追加する:

  • システムのプロパティに移動し、詳細システム設定をクリックします。 ここに画像の説明を入力

  • ここで、環境変数>>パス>>編集をクリックします。 ここに画像の説明を入力

  • ここでは、OpenCVdir / build / install / x86 / vc ** / binにあるbinフォルダをこの変数に追加します。既存のPath値を置き換えないように注意してください。

  • その後、環境変数を変更するためにシステムを再起動する必要があります。

Hello WorldのJavaでの例

Javaのファイルシステムから読み込んだOpenCvイメージ

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
 
public class Giris {    
    public static void main(String[] args) {
        //Load native library
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        //image container object
        Mat imageArray;
        //Read image from file system
        imageArray=Imgcodecs.imread("C:\\Users\\mesutpiskin\\sample.jpg");
        //Get image with & height
        System.out.println(imageArray.rows());
        System.out.println(imageArray.cols());
    }
}
 

OpenCVでイメージを読み込んで表示する

この例では、ディスクからカラー画像を読み込み、OpenCVの組み込み関数を使って表示する方法を見ていきます。 C / C ++、Python、またはJavaバインディングを使用してこれを実行できます。

C ++では:

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>

#include <iostream>

using namespace cv;

int main(int argc, char** argv) {
    // We'll start by loading an image from the drive
    Mat image = imread("image.jpg", CV_LOAD_IMAGE_COLOR);

    // We check that our image has been correctly loaded
    if(image.empty()) {
        std::cout << "Error: the image has been incorrectly loaded." << std::endl;
        return 0;
    }

    // Then we create a window to display our image
    namedWindow("My first OpenCV window");

    // Finally, we display our image and ask the program to wait for a key to be pressed
    imshow("My first OpenCV window", image);
    waitKey(0);

    return 0;
}
 

Pythonで:

import sys
import cv2

# We load the image from disk
img = cv2.imread("image.jpg", cv2.CV_LOAD_IMAGE_COLOR)

# We check that our image has been correctly loaded
if img.size == 0
    sys.exit("Error: the image has not been correctly loaded.")

# We create a window to display our image
cv2.namedwindow("My first OpenCV window")

# We display our image and ask the program to wait until a key is pressed
cv2.imshow("My first OpenCV window", img)
cv2.waitKey(0)

# We close the window
cv2.destroyAllWindows()
 

Javaの場合:

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.highgui.Highgui;
public class Sample{
public static void main (String[] args) {

    //Load native opencv library
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    //Read image from file first param:file location ,second param:color space
    Mat img = imread("image.jpg",CV_LOAD_IMAGE_COLOR);

    //If the image is successfully read.
    if (img.size() == 0) {
        System.exit(1);
    }
}
 

HighGuiには、opencv javaにはnamedwindowsまたはimshowに相当するものはありません。画像を表示するには、swingまたはswtを使用します。

OPENCVとは何ですか?

OpenCV(オープンソースコンピュータビジョンライブラリ)は、オープンソースのコンピュータビジョンと機械学習ソフトウェアライブラリです。機械学習、コンピュータビジョン、アルゴリズム、数学的操作、ビデオキャプチャ、画像処理など、さまざまな目的のために作られています。長年にわたり、研究者や開発者の間ではさまざまなプラットフォーム(Windows、Linux 、android、ios)また、それは様々な有名なプログラミング言語のラッパーを持っています。ライセンス契約に基づき、企業はコードを利用して変更することができます。

ライブラリには2500を超える最適化されたアルゴリズムが含まれており、性能とスピードに優れた精度を備えています。これらのアルゴリズムは、顔の検出と認識、オブジェクトの識別、ビデオ内の人間の行動の分類、カメラの動きの追跡、動く物体の追跡、物体の3Dモデルの抽出、ステレオカメラからの3D点群の生成、画像データベースから同様の画像を探したり、フラッシュを使って撮影した画像から赤目を除去したり、目の動きに従ったり、景色を認識したり、拡張現実感でオーバーレイするためのマーカを確立したりすることができます。OpenCVは、開発者と研究者の数は47,000人を超え、推定ダウンロード数は700万人を超えています。図書館は、プロの企業、研究グループ、その他のグループに幅広く存在します。

Google、Yahoo、Microsoft、Intel、IBM、Sony、Honda、Toyotaのような多くのよく確立された企業は、OpenCVを幅広く利用するApplied Minds、VideoSurf、Zeiteraなどの多くの新興企業があります。 OpenCVの導入された用途は、ストリートビューの画像をつなぎ合わせること、イスラエルの監視ビデオの侵入を監視すること、中国の鉱山機器を監視すること、ロボットがWillow Garageで物体をナビゲートして拾うこと、ヨーロッパのプール溺水事故の検出、スペイン、ニューヨークで、トルコの瓦礫の滑走路を調べ、世界中の工場の製品ラベルを調べ、日本での迅速な顔の検出を行った。 C ++、C、Python、Java、MATLABインターフェイスを持ち、Windows、Linux、Android、Mac OSをサポートしています。 OpenCVは主にリアルタイムビジョンアプリケーションに向いており、利用可能な場合はMMXおよびSSE命令を利用しています。完全な機能を備えたCUDAおよびOpenCLインタフェースは、現在積極的に開発されています。 500を超えるアルゴリズムと、これらのアルゴリズムを構成またはサポートする関数の約10倍の数があります。 OpenCVはネイティブでC ++で書かれており、STLコンテナとシームレスに動作するテンプレートインターフェイスを備えています。

公式サイトから収集した情報