0

cvCalcOpticalFlowBM

オプティカルフローのサンプルコードをちょっといじって、カメラからの入力を表示してみた。
ブロックマッチングによるオプティカルフローを使った。

できたソースコード、Makefile


narupeko opticalflownarupeko opticalflownarupeko opticalflownarupeko opticalflownarupeko opticalflow

image.cpp

#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include <ctype.h>
#include <stdio.h>
#include <iostream>
#include <boost/format.hpp>

using namespace std;
using namespace boost;

void detect_flow(IplImage *img, IplImage *img_p, IplImage *dst);

int main(int argc, char* argv[]) {
IplImage *img = NULL;
CvCapture *capture = NULL;
capture = cvCreateCameraCapture(0);
//capture = cvCaptureFromAVI("test.avi");
if(capture == NULL){
cerr << "capture device not found!!" << endl;
return -1;
}

CvSize size = cvSize(240, 180);
IplImage *img_resized = cvCreateImage(size, IPL_DEPTH_8U, 3);
IplImage *img_gray = cvCreateImage(size, IPL_DEPTH_8U, 1);
IplImage *img_gray_p = cvCreateImage(size, IPL_DEPTH_8U, 1);
IplImage *img_dst = cvCreateImage(size, IPL_DEPTH_8U, 3);

char winNameCapture[] = "Capture";
cvNamedWindow(winNameCapture, CV_WINDOW_AUTOSIZE);

while (1) {
img = cvQueryFrame(capture);
cvResize(img, img_resized);
cvCvtColor(img_resized, img_gray, CV_BGR2GRAY);
cvCopy(img_resized, img_dst);
detect_flow(img_gray, img_gray_p, img_dst);
cvShowImage(winNameCapture, img_dst);
cvCopy(img_gray, img_gray_p);
if (cvWaitKey(10) == 'q') break;
}

cvReleaseCapture(&capture);
cvDestroyWindow(winNameCapture);

return 0;
}

void detect_flow(IplImage *src_img1, IplImage *src_img2, IplImage *dst_img){
int i, j, dx, dy, rows, cols;
int block_size = 10;
int shift_size = 1;
CvMat *velx, *vely;
CvSize block = cvSize(block_size, block_size);
CvSize shift = cvSize(shift_size, shift_size);
CvSize max_range = cvSize(50, 50);

rows = int(ceil (double (src_img1->height) / block_size));
cols = int(ceil (double (src_img1->width) / block_size));
velx = cvCreateMat(rows, cols, CV_32FC1);
vely = cvCreateMat(rows, cols, CV_32FC1);
cvSetZero(velx);
cvSetZero(vely);

cvCalcOpticalFlowBM(src_img1, src_img2, block, shift, max_range, 0, velx, vely);

for (i = 0; i < velx->width; i++) {
for (j = 0; j < vely->height; j++) {
dx = (int)cvGetReal2D(velx, j, i);
dy = (int)cvGetReal2D(vely, j, i);
cvLine(dst_img, cvPoint(i * block_size, j * block_size),
cvPoint(i * block_size + dx, j * block_size + dy), CV_RGB(255, 0, 0), 1, CV_AA, 0);
}
}
}


Makefile
SRC = image.cpp
DST = image

prefix=/opt/local
INCPATH=$(prefix)/include
LIBPATH=$(prefix)/lib

OPT= -lcv -lcvaux -lcxcore -lhighgui

CC=g++ -O

CFLAGS= -I$(INCPATH)/opencv
LDFLAGS=-L. -L$(LIBPATH)


all:
$(CC) $(SRC) -o $(DST) $(CFLAGS) $(LDFLAGS) $(OPT)

0

CMR-250

37e3808047553cedb34daa9b1d7ab2a3.jpg

L字USBコネクタつけた。これで鞄の中でも折れにくい

0

橋本修了のお知らせ

先日卒業式があった。慶應SFCの政策・メディア研究科の修士号をもらった。(サーティフィケイトは無し)
今年度いっぱいは無職、ではなくKMDの訪問研究員扱いでCRESTに引き続き参加しつつ、未踏ソフトウェアの開発をする。


奥出研の先輩に修了祝いを自分で開催しろと言われていて、近いうちにやろうと思っている。ITリテラシーが高い人ばかりなのでATNDで告知してmixiやtwitterで呼ぶつもり。

ちなみに最近だれかと食事する度に、勝手に祝われていると思っておくライフハックを実践している。もう4回ぐらい祝われている計算になる。俺は幸せ者だ(脳内物質的な意味で)

R0012801

R0012805

2

AspireOneにUbuntuをインストールして使っている

春頃にTeleshadowの実装のために、修理品のAspireOneをNTTストアで2万ちょっとで買って使ってたんだけど、修論が終わってまあTeleshadow動かす為だけに置いておくのももったいないのでUbuntu9.04を入れてみた。
これけっこうよかった。最近は開発がLinux中心なので、持ち歩く事も多い。

せっかくなのでセットアップをまとめておく


■Windows
Windowsはもうあまり使ってない。
AspireOneの起動時に winlogon.exe がエラーを出してたんだけどこれは「アプリケーションの追加と削除」からLaunch Managerを削除したら出なくなった。
そもそもメモリが1GBだけなので、Windows動かすのがけっこうつらい。


■インストール
参考:AspireOneにUbuntu9.04インストール – 橋本詳解
CD-ROMドライブが無いのでUNetbootを使ってインストールした。
デスクトップ版Ubuntu9.04のisoイメージをダウンロードしてきて、UNetbootのWindows版で空のUSBメモリ(1GB)をUbuntuインストールディスク化した。
AspireOneに刺して、BIOS起動時にF12押してUSBデバイスからbootするようにすると、GUIのインストーラが出てくる。
パーティションをUbuntu 60GB、Windows 40GBに切り直してインストールした。

内臓カメラ、キーボード、無線もすぐ使えた。


インストール中
Ubuntuインストール中


■e-mobile
最近イーモバイルのD23HWを買った。
GUIとCUIそれぞれから使える。電波強度が表示できないけど実用上問題は無い。
pon, poffコマンドの場合:emobile D23HWを使う(CUIで) – 橋本詳解

gnome-pppの場合:emobile D23HWを使う(CUIで) – 橋本詳解



■デスクトップの設定
ワークスペースを2×2に増やして、ウィンドウをキーボードショートカットでワークスペース間移動できるようにする。

キーボードショートカットの設定から、ctrl+上下左右キーで上下左右のワークスペースに移動するよう設定。ctrl+shift+上下左右キーでウィンドウを上下左右のワークスペースに移動するように設定。

左上Firefoxとemacs、右上Terminal、左下ThunderbirdとSkypeとPidgin、右下予備というふうに置いておくと、全部フルスクリーンにしておいても画面切り替えでなんとかなるので小さい画面でも戦える。

あとapt関係のアップデートと、ssh, zsh, emacs、mercurial、ruby関連、opencv、boostなどのインストールをする。
参考:Thinkpad X32にUbuntu 8.10 Desktop版をCDから入れた – 橋本詳解



■キーボード
キーボードの設定から「capslockをもう一つのctrlキーに設定」を選択
日本語入力。SCIMの全体設定で開始に変換キー、終了に無変換キーを割り当てる。他は全部キーを削除する。

これでMacと同じように、ホームポジションに置いた時親指で日本語入力をON/OFFできるようになる。

キータッチはネットブックの中ではけっこういいと思う。キーも大きくて押しやすいし、記号キーの配列も変態じゃないからコード書くのにも支障ない。


■電源
バッテリーは2時間もつ。ACアダプタはinspiron miniのが同じ電圧だったのでそっちを持ち歩いている。


■WiFi
Gnome標準の最初からついてるやつでばっちり


■サスペンド
ちゃんとできる。よく使ってます


■Firefox
最初から入ってる。拡張のHideMenubarを入れると画面を有効活用できる。
あとはGreasemonkeyでLDRize、Autopagerize、minibuffer
拡張のIt’s all text、Adblock plus、SBMカウンタ、TabMixPlux、Tomblooなど。
ブックマークは普段使ってるMacbookProからHTML形式でエクスポート・インポートした。
FlashPlayer10もAdobeのサイトでインストールできる。

スムーズスクロールはoffにする。

■Thunerbird

sudo apt-get install thunderbird
Windowsからもってきたプロファイルがそのまま使えた。
~/.mozilla-thunderbird/の下にコピーすれば読み込まれる。


■IM
PidginでMSNメッセンジャーとGoogleTalkが使える。Skypeはダウンロードしてきてインストール。
Pidginはすぐ[ツール]→[個人情報]で「コンタクトリスとの人のみ許可」に設定しないとspamがいっぱい来る。


■Gyazo
Linux版がある。
/usr/local/bin/gyazo として置いて、画面の上のパネルにショートカットを追加してすぐ使えるようにする。


■DropBox
Linux版がある。インストール後に再起動すると使える。
メニューにも登録されるし、dropboxコマンドからも動かせる。
dropbox start
dropbox stop
dropbox status



■Office
OpenOffice.orgが入っている。Word/Excel/PowerPointを見るのは問題ない。excelの高度なマクロなどは再現されてるか不安で、結局あまり使ってない。


■プロジェクタ
設定が難しい。10分ぐらいかけても画面が出せなかった。
プレゼン前に確認しておいた方がいい。




というわけで長時間プログラミングはしたくない環境だけど、おでかけしながらサーバーのタスクを監視したり簡単なスクリプトを書いたりする環境はできた。
よかったよかった

0

昼飯を食いに行ったらカラオケルームに通された

定食屋に行ったらカラオケルームに通された


R0012649R0012650

歌いだしそうな瓜生さん
R0012644


カツ煮定食800円。おいしかった
R0012648


食後のインターネット
R0012651R0012652


ここ。画面と音響設備もあるし昼はミーティングルームとして貸し出したら面白いんじゃないか
IMG_0595IMG_0596