vimを使い慣れたらインストールすべきプラグイン

このエントリーをはてなブックマークに追加
はてなブックマーク - vimを使い慣れたらインストールすべきプラグイン
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

よく忘れるので,普段vimに入れているプラグインをまとめてみた.

autodate.vim

こちらを参照.プログラムのソースコード中に最終更新日を書き込みたいときに便利.ファイル中に

Last Change:.

と書き込んでおくと,保存時に日付が自動的に挿入されるようになる.

vimspell.vim

こちら参照.これはvimでaspellというスペルチェッカをvimから使えるようにするプラグイン.

localrc.vim

こちら参照.このプラグインは,vim起動したディレクトリに応じて異なる設定を読み込むことができるようになるもの.これをインストールしたあと,vimを起動するディレクトリに,ディレクトリごとの設定を書いた.lvimrcを置くと,起動時に読み込んでくれるようになる.

僕は.lvimrcに,

set path+=include/
set path+=src/

と書き込んでsrc/,include/のあるディレクトリに置いている.こうしておくと,srcとincludeという異なるディレクトリに置いてあるファイルをincludeしていても,そのファイル名上でgfと入力するとファイルを開くことができて便利.

outputz.vim

こちら参照.これは,vimで書いた文字数をoutputzへと送信するプラグイン.別途curlが必要.

OpenCVからネットワークカメラのVideoAPIを利用

このエントリーをはてなブックマークに追加
はてなブックマーク - OpenCVからネットワークカメラのVideoAPIを利用
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

ネットワークカメラ

ここでは,AXIS 211のようなHTTPアクセスのできるカメラをネットワークカメラと言う.さらに言うと,VAPIXというAPIを備えたカメラとする.

こういうカメラだと,Linuxではmplayerなどのプレイヤーを使って,こんなふうに動画をとってくることができるようになっている.

ネットワークカメラへのアクセス

以降ではAxisのカメラを対象とする.基本的には上述のAPIを備えていれば,URLを適切に変えるだけで同じように操作できる.

Axisのカメラの場合

http://user:pass@camera_address/axis-cgi/jpg/image.cgi

で画像へ,

http://user:pass@camera_address/axis-cgi/mjpg/video.cgi

で動画へアクセスすることができる.(ちなみに,user,pass,camera_addressは,そのネットワークカメラのユーザ名,パスワード,IPアドレスを入れること.)ただし,プレイヤーによっては指定したファイル名の最後(拡張子)が動画の拡張子でないと再生できない場合がある.(今の場合だと,.cgiになっている.)そこで次のようにダミーのパラメータ(type=.mjpg)をつけて指定する.

http://user:pass@camera_address/axis-cgi/mjpg/video.cgi?type=.mjpg

OpenCVからのアクセス

上述のネットワークカメラに対し,OpenCVを使ってプログラムからアクセスする.

cv::VideoCaptureを使った動画ファイルからの画像取得

普通,ローカルのPC上の動画ファイル(例えばvideo.mjpg)を開いて,そこから順に画像(cv::Mat)を取り出すコードは次のようになる

#include <cv.h>
#include <highgui.h>
int main(){
    cv::VideoCapture cam("video.mjpg"); // カメラ
    cv::Mat m; // 画像用の変数
    while((char)cv::waitKey(1)!='q'){
        cam >> m; // 画像の撮影
        /* 好きな処理 */
        cv::imshow("show",m); // 画像の表示
    }
}

結構簡単.

ネットワークカメラからの動画取得

ネットワークカメラからの場合,ファイル名の代わりに上述のURLを指定するだけでOKだった.

#include <cv.h>
#include <highgui.h>
int main(){
    cv::VideoCapture cam("http://user:pass@camera_address/axis-cgi/mjpg/video.cgi&type=.mjpg"); // カメラ
    cv::Mat m; // 画像用の変数
    while((char)cv::waitKey(1)!='q'){
        cam >> m; // 画像の撮影
        /* 好きな処理 */
        cv::imshow("show",m); // 画像の表示
    }
}

これでネットワークカメラから画像を取ってこれるはず.あとはOpenCVで好きな画像処理をすればOK.