0

最近買った本 – パーソンズ、C++

知識社会学と思想史
知識社会学と思想史
posted with amazlet at 09.03.10
タルコット パーソンズ
学文社
売り上げランキング: 356816
おすすめ度の平均: 5.0
5 知識社会学への批判的視座
まだあんま読んでない。
フランス・ドイツのまとめ本的な感じ



Modern C++ Design—ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)
アンドレイ アレキサンドレスク
ピアソンエデュケーション
売り上げランキング: 99561
おすすめ度の平均: 5.0
5 必読
5 文句なしに良書です。しかし内容は難解です
5 テンプレートの威力
5 テンプレート
4 凄いのは分かった。でも、僕には使えません(泣
C++はTemplateがすごい機能らしいから買った



スプーク・カントリー (海外SFノヴェルズ)
ウィリアム・ギブスン
早川書房
売り上げランキング: 3525
以前デンマークのイベントに行った時に、来場者のお兄さんに薦められた本で「GEOハッキングの話」らしいので英語版を買ったんだけど
いつのまにか翻訳されてしまっていて、英日両方持っている状態になった。



Effective C++ 【改訂第2版】      アスキーアジソンウェスレイシリーズ—Ascii Addison Wesley programming series
Scott Meyers
アスキー
売り上げランキング: 198288
おすすめ度の平均: 5.0
5 C++入門書の次に買うべき本
5 C++プログラミングのノウハウが詰まってます
5 動いてる......でも.....
5 漠然たる開発に陥ることのないように
5 C++書籍でもっともためになる本
評判いいけど中古しかなかったので中古で買った。
普通にC言語だいたいやった後でC++に行くにはこれがよさげ



OpenCV プログラミングブック
奈良先端科学技術大学院大学 OpenCVプログラミングブック制作チーム
毎日コミュニケーションズ
売り上げランキング: 5371
おすすめ度の平均: 3.0
3 とっかかりとしてはよい本
4 OpenCVを日本語でまとまって解説した初めての本
2 肩すかし
頭から読めばOpenCVがだいたいわかる。(読むまでただのwebcam顔認識ツールだと思ってた)
Processingの例題とかで出てくるような画像処理に必要な関数は一通り揃っているので組み合わせれば凄い速度で動く。
サンプルコードは、一部分しか掲載されていなくて大事なdefine部分などが抜けていて意味不明になっている事もあるけど
webで探せば琉球大のページなど全文が掲載されているサイトがあり助かる



WAVプログラミング—.NET C#で学ぶ音響処理
北山 洋幸
カットシステム
売り上げランキング: 179506
画像やってたらbyteいじって音声も作りたくなったぞと

0

OpenCVで顔色の悪いアイコン画像をたくさん生成する

OpenCVで、画像の特定領域のHSV(HSB)を増やしたり減らしたりするツール「colortrans」を作った。
コマンドラインからファイル名を渡すと実行できるタイプ。

こんなコマンドでお手軽一発生成できます

colortrans ../data/shokai.jpg result.jpg -30 50 -10 ../data/shokai-mask.bmp


できた画像
face color transition


■ダウンロード
mercurialリポジトリをbitbucketに置いた。
shokai / twitter face color change / overview — bitbucket.org
Ubuntu8.04でビルドしたバイナリもコミットしておいた。OpenCVなので他環境でも同じコードをコンパイルしなおせば実行できるはず。


twitterでriywoさんがアイコンに自分の最近の発言ワードを出しているのを見て、じゃあ自分の顔色を使って何か表現できないかという事で作り始めた。なのでリポジトリ名が twitter face color change になっている
でもまだ何と色を連動させればいいのか決めかねているので、アップローダはまだ書いてない。たぶんtwitterと関係のないリアルワールドの情報の方が面白い。俺の脈拍とかクリエイティブビートとか・・・




■顔だけ色を変える方法
画像認識ではできそうにないので、手動でマスクを作る

イラレでもPhotoshopでもいい。
making mask


元画像と同じサイズで、顔部分だけ黒で描く画像間違えた。顔を白で、顔以外を黒で描くだった
making mask


モノクロ2階調のBMP形式で保存する
making mask
ファイル名はなんでもいい。



できたマスクBMP画像と、今回使うjpeg元画像



■変換する
colortransというUbuntuでビルドしたバイナリがコミットしてあるので、

入力ファイル名 出力ファイル名 Hue Saturation Value マスクファイル名

の順に引数を渡すとできる。

colortrans shokai.jpg result.jpg -30 50 -10 mask.bmp



マスクを指定しないと、画像全体の色を遷移させる事も出来る

colortrans shokai.jpg result.jpg 40 0 0

face color transition
これはこれで何かに使えるかもしれない



■プログラム
MacやWindowsでも、OpenCVをはじめたで書いたとおりビルド環境を作れば使える。
OpenCVは簡単なので、各言語バインディング使うより普通にCで書いた方がいいと思う

colortrans.cpp

#include <stdio.h>
#include <highgui.h>
#include <cv.h>

IplImage *img = NULL;
IplImage *imgMask = NULL;
IplImage *imgHsv, *imgResult, *imgHue, *imgSat, *imgVal;

int main(int argc, char** argv){
  if(argc < 6){
    puts("Put filenames and HSV(HSB) as ARGS");
    puts(" colorchange input output H(int) S(int) V(int) (mask)");
    puts("Usage:");
    puts(" colortrans ../data/shokai.jpg result.jpg -30 50 -10 ../data/shokai-mask.jpg");
    puts(" colortrans ../data/shokai.jpg result.jpg 40 0 0");
    return -1;
  }

  img = cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR);
  if(argc > 6) imgMask = cvLoadImage(argv[6], CV_LOAD_IMAGE_GRAYSCALE);

  imgHsv = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_8U, 3);
  imgResult = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 3);
  imgHue = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
  imgSat = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
  imgVal = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);

  cvCvtColor(img, imgHsv, CV_BGR2HSV);
  cvSplit(imgHsv, imgHue, imgSat, imgVal, NULL);
  cvAddS(imgHue, cvScalarAll(atoi(argv[3])), imgHue, imgMask);
  cvAddS(imgSat, cvScalarAll(atoi(argv[4])), imgSat, imgMask);
  cvAddS(imgVal, cvScalarAll(atoi(argv[5])), imgVal, imgMask);
  cvMerge(imgHue, imgSat, imgVal, NULL, imgHsv);
  cvCvtColor(imgHsv, imgResult, CV_HSV2BGR);

  cvSaveImage(argv[2], imgResult);
}

3

OpenCVをはじめた

openFrameworksをやっていて詰まったのでとりあえずOpenCVをやってみることにした。

openFrameworksはOpenCV・OpenGL・シリアルポート関連・音声関連のC++ライブラリをまとめたWin/Mac/Ubuntuで動作するクロスプラットフォームラッパーで、processingの影響を受けているらしいのだが、その中のOpenCVとOpenGL自体がまず巨大なライブラリなのでこいつらを扱う作法を知っていないとopenFrameworksが使いこなせない。


今回はOpenCVを単体で扱ってみてどんなもんか探ってみた。


■OpenCVのセットアップ、サンプル実行、コンパイル環境と対応カメラの確認

マシンに3つOSが入っているので実行環境も3つ揃えてみた。
MacとUbuntuはgccで、WinはVS2008でコンパイル。Ubuntuは色々ためしたけどiSightを認識しなかったが古い外付けUSBカメラを認識して使えた。
この内Macだけが駄目。描画が異常に重い。ググったらhighguiとCarbonの組み合わせが悪さしている?ような情報もあったがよくわからなかった。でもちゃんと動いていると報告してる人がたくさんいる。悔しい。

最近は全部パッケージ管理システムから入るんですね


本当はMacかUbuntuで動かしたかったけど、WindowsでVS2008でやる事にした。
俺が電車で移動中プログラムを書く事が多いので、Windowsからは内蔵i-Sightを使えて一番都合が良い。

cvWaitKey(msec)の待ち時間を短くしすぎなければ(30ぐらいなら大丈夫)どの環境でも動く事が確認できたので、後述するプログラムはどの環境でも動くと思う。少なくともWindowsとUbuntuでは動いている。



■画像処理の勉強

この本でやった。プログラムの途中重要な定数宣言部分が省略されまくったりしていて困ったけど、理論的な所は詳しく解説してくれているのでこの本と翻訳版ドキュメントサンプル集を見ればなんとかなった。


OpenCV プログラミングブック
奈良先端科学技術大学院大学 OpenCVプログラミングブック制作チーム
毎日コミュニケーションズ
売り上げランキング: 58513
おすすめ度の平均: 3.0
3 とっかかりとしてはよい本
4 OpenCVを日本語でまとまって解説した初めての本
2 肩すかし


OpenCVというとまっさきに「顔認識」を思い浮かべるけど、機械学習を用いた分類器については巻末のリファレンスに少し書かれている程度で、この本では基本的なOpenCVの組み込み関数を使った2値化やノイズ除去や表色系の変換、輪郭、エッジ抽出、テンプレートマッチング、物体追跡、背景差分法などが書かれている。書かれている内容はbuilt with processingディジタル画像処理の基礎と応用なんかに書かれている内容と被っている部分が多いけど、OpenCVの関数を使っているから滅茶苦茶処理が速い。やばい。もっと早くOpenCVに移れば良かった。


Read more

0

openFrameworksでサンプルプロジェクトのコンパイル

WindowsでVisualStudio2008 Professional C++で、openFrameworks v0.05のサンプルをコンパイルする所まで。
今のところDirectX SDKは必要ないみたいだ。

openFrameworks: downloadの「visual studio FAT」をダウンロード。ライブラリと、サンプルプロジェクトのソースコードが入っている。

同じ場所にある「win32 example apps」にはコンパイル済みの実行ファイルが入っている。動的に波形を生成して音を出したり、3Dを回したりカメラの画像にエフェクトをかけるサンプルがたくさん入っている。


まず適当なソリューション(.slnファイル)を開いてビルドする。
エラーがでる。GLaux.libが見つからないらしい。
OpenGL関係のライブラリらしくて、

C:\Program Files\Microsoft SDKs\Windows\v5.0\Lib\IA64

で発見したので

\libs\glu

にコピーして置いた。
VS2003の頃はPlatform SDKの下にあるらしいけど、俺はMicrosoft SDKの下にあった。無いと言っている人もいる。
VS2005も過去にこのマシンにインストールしていたから、この位置にあるのかな?
どうしても見つからない人は連絡ください。


再びビルド。今度はrtAudioD.libでエラーが起こる。
libs\rtAudio\rtAudioD.libのバージョンが古いらしい。
http://www.openframeworks.cc/files/rtaudio-vs2008.zip
をダウンロードしてきて
Release\rtAudio.libをrtAudioD.libにリネームして

\libs\rtAudio

に置く。

これでコンパイル通って動く。
文字コードがCP932だよというwarningが出るので、後で文字コードは後でUTF-8に統一しよう


openCVのサンプルを動かしてみた。背景差分とblob判定してる。
openFrameworks


ofVideoGrabberのサンプル。processing並にカメラの画像取得のコードが短い。
openFrameworks