OpenCV/RAW画像生成 – Point at infinityという記事をアップしました.
といっても個人用ですが。。。(←需要があるとは思っていない)
まぁ,参考までに.
/****** [ここから余談]******
OpenCVの普及により画像処理という分野が身近になったのはいいのですが,
最初からOpenCVに依存しすぎると,理屈がわかっていなくても高度なアルゴリズムが
簡単に組めてしまうため,そういう人に限って「やってみたらできました」的な
結果に陥りやすいという諸刃の剣.
C言語習いたての人なんかは一からアルゴリズムをコーディングしてみた方が
後々のために良い勉強になりそうな気がします.
C言語に慣れてきたら,ppmなどファイル情報がヘッダ部に書き込まれているような
フォーマットにステップアップするとかね.
******[ここまで余談] ******/
ということで,OpenCVの話はここらへんにして.
最近,30日でできる! OS自作入門という本を買いました.
以前から気にはなっていたのですが,なかなか購入までには踏み切れなくて。。。
なのでやる気が再燃した今こそと,思い切って購入.
値段は3,990円とちょっと高めですが,それだけの価値がある読みやすい本だと思います.
ということで,現在1日目終了(バイナリエディタ久し振り使ったな…).
いつまで自分が続くのか…というのも気がかりですが,最近いろんなものに手を付け過ぎな感が。。。

30日でできる! OS自作入門
著者/訳者:川合 秀実
出版社:毎日コミュニケーションズ( 2006-03 )
定価:¥ 3,990
Amazon価格:¥ 3,990
単行本 ( 705 ページ )
ISBN-10 : 4839919844
ISBN-13 : 9784839919849
またまた,話が飛びますが,
奥華子のシングル「手紙」をようやく買いました.
GYAOで「手紙」のPVが120秒間視聴できるんですけど,音楽とPVの出来がすごく良くて癒されます.
当分,BGMとして活躍しそうです.

手紙 / 奥華子 / CD ( Music )
ポニーキャニオン( 2008-01-23 )
定価:¥ 1,200 ( 中古価格 ¥ 142 より )
コメントなし »
前回予告していたようにC++でGainerを扱うために行った処理を簡単に書いてみます.
もしかしたら,間違っていたり,こうした方が良い点などがあるかもしれないので,ご指摘お願いします.
ということで,今のところ最低限用意しているメソッドはこんな感じ.
(1)Gainer初期化
通信速度,パリティ等の設定(こちらを参考)
(2)リセットメッセージ送信
Gainerモジュールに文字列「Q*」 を送信.
(送信に成功したらGainer側からメッセージが送られるので受け取る)
(3)コンフィギュレーションの設定
Gainerモジュールに文字列「KONFIGURATION_1*」を送信.
(送信に成功したらGainer側からメッセージが送られるので受け取る)
(4)データの取得
Gainerモジュールに文字列「I*」を送信.
送信に成功したら,アナログ入力ain0~ain3のデータが文字列として
送られてくるので,その文字列を受信.
(5)文字列→数値変換
受信したアナログ入力のデータは,「Ixx…xx*」(※xx…xxがデータ部)
という構成の文字列なので,まずは入力分だけ文字列を分割.
また,値は16進なので10進に変換して利用.
(6)後処理
ポートのクローズ処理.
************************
あと,「プログラム風」に書くとこんな感じです.
※前回の記事ではこれらの処理に移動平均法の処理も加えています.
C++:
#include "MyGainer.h" //ヘッダのインクルード
MyGainer *gainer;
int main(int argc, char** argv)
{
//Gainerオブジェクト生成
//ここではCOM3を指定
gainer = new MyGainer(3);
//初期化
//(COMポートオープン、通信速度等設定)
gainer->initialize();
//コンフィギュレーションの設定(MODE1)
gainer->setConfiguration(1);
//キー値
int key = 0;
//ループ
while(1)
{
//データ取得
//(メッセージ送信 + データ受信 + 文字列→数値)
gainer->getAllAnalogInput();
//キー入力待ち(1msec)
key = getKeyInput();
//ESCキーが押されたら終了
if(key == 0x1b)
{
break;
}
}
//後処理(COMポート解放)
gainer->release();
delete gainer;
return 0;
}
1 コメント »
C++でGainerを扱う(といってもアナログ入力のみ)ライブラリを自作したので,早速OpenGLと組み合わせて実験.とりあえず,動いたー!!
でも,ソースが汚いです。。。_| ̄|○
ということで,公開はまだまだ先になりそう(コードがグダグダなのでしないかも。。。).
とりあえず,どんな感じでシリアル通信しているかを簡単に記述した擬似コードを後日記事にする予定.
Gainer with C++(加速度センサ)
Get the latest Flash Player to see this player.
2 コメント »
前回の記事で,
>C++でGainerを扱えるライブラリもあったら便利そうですが
とか言ってたけど,ちょっと探した感じだと無さそうなので自力でなんとか作ってみる.
まぁ,Gainerモジュールとはシリアル通信ができるので,Tutorial/Basic/Common/03/ja - GAINER.ccやSourceForgeに置いてある資料(シリアル通信の際のコマンド表),javaのソースなんかを参考にしながらゴリゴリと(自分用なのでエラー処理とか適当).
とりあえず,アナログ入力1~4までのデータ取得はできた感じなので,時間を見つけて簡単なアプリができたらなぁと.
以下はアナログ入力1~3の値(加速度センサのデータ)表示のスクリーンショット.

コメントなし »
これまでDirectShowでキャプチャするときにはOpenCVのCVCAMをメインで使っていたのですが,最近見つけたvideoInput Libraryに移行しようかなぁとか思ってみたりしてます.
#CVCAMもキャプチャ速度は速いんだけど,コールバック関数を使ってるからOpenGLなんかと組み合わせにくいんだよね…
実際にvideoInput Libraryを使ってみた感想としては,
[長所]
・基本的に初期設定後,キャプチャ関数を実行するだけなので簡単で扱いやすい
・(内部で無駄な処理をしてないみたいなので)かなり高速&CPU使用率が低い
※640x480でもサクサクキャプチャできます
[短所]
・FPSの設定が見当たらない(見逃してるだけかも)
#ライブラリのソースは公開されているため,いざとなったら,自分でFPS設定部を書けば解決する話.
#そのため,そんなにマイナスポイントではない.
ということで個人的にはかなり好印象です.
後でもう少しライブラリのソース追っかけてみようかな.
明後日ソフ開を受けるので,それが終わったらサンプルプログラムを公開予定です.
とりあえず,試験勉強しないとな.>自分
1 コメント »
dandelion's laboratoryに「Windows SDKインストール」という記事と「VS 2005でCVCAMを使う」という記事を更新しました.
それにしても,VC++でDirectShowを扱う環境としてPlatform SDKが最新だと思っていたのですが,現在は,Windows SDKが最新なんですね(Windows SDK自体は結構前にリリースされているみたいだけど。。。).
ということで新し物好きな性格上,相変わらずながら後先考えずPlatform SDKを削除して入れてみました.
(※インストールするとVC++ディレクトリのパス設定が初期状態に戻ってしまうので,事前にパスの設定を控えておかないと危険)
インストールしてからも,BaseClassesのビルド時にエラーと格闘する羽目になりましたが,英語サイトのBBSでなんとか解決(インクルードディレクトリの記述順で解決するとは思わなかった。。。←不毛な1時間を過ごした人).
ということで,カメラ周りの環境は一通り整った感じ.
**************
あと,余談ですが,FlyCapture SDKチュートリアルというサイトの存在に最近気付きました(遅)
簡単に言うと,Point Grey Research社カメラのFlycapture SDKとOpenCVを組み合わせた便利なサンプルが載っているサイトです.
いやいや,学生の時にこのサイトの存在知ってたらなぁ。。。という感じです(←PGRカメラをDirectShowカメラとして扱えるドライバ + CVCAMでプログラミングしてた人).研究でPGRカメラを用いている人でOpenCV使いたい!という人には便利かもしれません.
コメントなし »
学生の時からVC++でM_PIを使おうとしたら「M_PIが定義されてない」
ってエラーが出るんだろう? と思ってはいたものの,スルーして
#define M_PI 3.1415926535897932384626433832795
とか定義してだましだましやってたんですが,
(特にM_PIについて調べたわけじゃないけど)たまたま読んだblogにて
#define _USE_MATH_DEFINES
#include <math.h>
と定義してやると,うまくいくらしいということで
やってみたらうまくいった.でも,理由がわからないと
なんだか気持ち悪いので,math.hを読んでみると
#if defined(_USE_MATH_DEFINES) && !defined(_MATH_DEFINES_DEFINED)
#endif
の間に
#define M_PI 3.14159265358979323846
って記述してあるので,M_PIを使うようなプログラムでは,
#include <math.h>
でmath.hをインクルードする前に
#define _USE_MATH_DEFINES
としなきゃ、そりゃあ「M_PIが定義されてない」ってエラーも出るよなと納得.
長年つっかえてたものが取れてちょっとスッキリ.
1 コメント »