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

cocoa emacsをインストールした

carbon emacsを使ってたけど、cocoa emacsに乗り換えた。
動作中にメニューの[Windows]→[Font Panel]でフォントサイズをかんたんに切り替えられるのがうれしい。


macportsでインストールした

sudo port install emacs-app-devel

先に持ってたホームディレクトリの.emacs.elや.emacs.d/以下は削除した。

/Applications/MacPorts/Emacs.app から起動。

Command + , で設定画面がでて、フォントなどの設定ができる。
バックスラッシュを打てるようにAlt/Optionキーの割り当てを無くして、かわりにFnキーにMetaを割り当てる
これでalt+¥で\が打てるようになった。
cocoa emacs setting


背景黒で文字を白にしたいので
esc-xして
set-background-color black
set-forground-color white
を指定。
Save Optionsで保存し、一旦終了する。次回起動時に背景黒文字白になってればok
cocoa emacs setting


Firefox拡張のIt’s All Textから指定するエディタへのパスは
/Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs
になる。これでtextareaをcocoa emacsで編集できる。
it's all text config


0

Mac版Arduino IDEがlibrxtxSerial.jnilibが見つからないエラーで起動しないのを対処

起動時にこんなエラーが出た。環境はMacbook pro 17インチ OSX LeopardでXCodeなどもたぶん全部入れてあるメイン開発環境。

java.lang.UnsatisfiedLinkError: /Applications/arduino/Arduino.app/Contents/Resources/Java/librxtxSerial.jnilib: no suitable image found.



arduino error


原因は64bit環境で実行されようとしているかららしい。
対処法は2つ。


■Arduinoを32bit版で起動させる
Arduino実行ファイルを右クリックして「情報を見る」
「32ビットモードで開く」にチェック入れる
(hitoriblogさんより)


■64bit版rxtxSerial.jnilibをインストールする
http://iharder.sourceforge.net/current/java/librxtxSerial.jnilib
/Arduino 16.app/Contents/Resources/Java/
の中にある librxtxSerial.jnilib と入れ替える。

これはTechnobabble: Arduino: Problems With librxtxSerial.jnilibに書いてあった方法。


両方ともIDEの起動までは試した。
Arduinoの実機が今ないので動作は試していない。まあどっちかで動くだろう。



他にもフォーラムでも同様の質問が出ていて、こちらでは
アプリケーション/ユーティリティ/Java Preferences
でJavaアプリケーションの方でJ2SE5.0の32bit版が優先されるように上の方にもってこいという指示が出ていた。質問者はこれで解決したらしいけど俺の環境では駄目だった。
これはArduinoがJ2SE6向けに作られていないため。

0

Macbookの電源を買った

コネクタの調子が悪くなったので、買い換えようとしたら品切れだったのでMacbookPro用を買ってみた。
ふつうMacbookは60Wの電源なんだけど、MacbookProの85W電源を使うと充電が速い。値段も本体サイズも同じだし。

アップル Apple MagSafe電源アダプタ(85W) MA938J/A
アップル
売り上げランキング: 11860

何も問題なく使えている。