C++
今までboost::formatを使ってたけど使わないとしたら、stringstreamを使うものらしい。めんどい。 #include <sstream> using namespace std; ostringstream os; os << "tmp/" << 35 << ".jpg"; // 連結 string out_filename = os.str();</sstream>
http://api.zeromq.org/zmq_cpp.htmlこれを #!/usr/bin/env ruby require 'rubygems' require 'zmq' ctx = ZMQ::Context.new sock= ctx.socket(ZMQ::SUB) sock.connect('tcp://127.0.0.1:5000') sock.setsockopt(ZMQ::SUBSCRIBE, 'count') loop do puts sock…
http://d.hatena.ne.jp/shokai/20100811/1281492751 のC++ binding版 Cの関数のラッパーなので先にCで試してからだったら照らし合わせて(http://api.zeromq.org/zmq_cpp.html)理解が早かった pub.cpp #include <stdio.h> #include <iostream> #include <string> #include <zmq.hpp> #include <boost/format.hpp> usi</boost/format.hpp></zmq.hpp></string></iostream></stdio.h>…
mbedでstdは使えるけどboostが使えないのでsprintfの使い方を勉強した。 c++のstringとcのchar配列を行ったり来たりするのがめんどい・・ test.cpp #include <iostream> #include <string> #include <stdio.h> using namespace std; int main(int argc, char* argv[]){ string result_st</stdio.h></string></iostream>…
regex_matchを評価すればいい regex_match.cpp #include <iostream> #include <boost/regex.hpp> #include <string> using namespace std; using namespace boost; int main(int argc, char* argv[]){ string str = "asdftesthogehoge"; if(regex_match(str, regex(".*t.st.*"))){ cout << "matc</string></boost/regex.hpp></iostream>…
curlppがうまくいかなかったのでlibcurlの方を使おう 参考:http://ja.doukaku.org/41/nested/result.jpgとしてファイルに保存する curl.hはmacportsでcurlインストールしたら入った?気がする ubuntuでは sudo apt-get install libcurl4-gnutls-devでインス…
sudo apt-get install libboost-filesystem-dev#include <boost/filesystem.hpp> string fileName = "/home/sho/tmp.txt"; boost::filesystem::path fpath(fileName); if(boost::filesystem::exists(fpath)){ cout << "already exists " << fileName << endl; } Macではlibboost_sy</boost/filesystem.hpp>…
なるほどなるほど #include <stdio.h> #include <stdlib.h> #include <string> #include <iostream> using namespace std; template <class T> void foo(int i){ cout << "int:" << i << endl; } void foo(double d){ cout << "double:" << d << endl; } void foo(string s){ cout << "string:" << s << end</class></iostream></string></stdlib.h></stdio.h>…
"と'の前にバックスラッシュをつけたい。 \\\\と4つ連続で書かないと、置換できなかった。まさか4つとは。 regex_replace.cpp #include <iostream> #include <string> #include <boost/regex.hpp> using namespace std; using namespace boost; int main(int argc, char* argv[]){ string str = </boost/regex.hpp></string></iostream>…
boost::anyで何型でも入る変数を作れる。参考 letsboost::any 本の虫: Inside Boost.Any qune: プログラミングメモ - boost::any を読む 内部の実装についても詳しく書かれていて勉強になったが、templateはなんとなくわかるけどそもそもC++でclass設計をし…
参考:http://www.gesource.jp/weblog/?p=1654前の http://d.hatena.ne.jp/shokai/20091231/1262248887 をboost::tieで受け取ってみた tupletest.cpp #include <iostream> #include <string> #include <boost/tuple/tuple.hpp> using namespace std; using namespace boost; // 多値を返す tuple<int, double, string> test_</int,></boost/tuple/tuple.hpp></string></iostream>…
簡単だった。もっと早く使ってれば良かった。画像処理は座標とかサイズを複数返したい時がよくあるから 関数宣言とmake_tupleの引数の数が違うとコンパイル時にエラーになる。intやdoubleは混ぜるとcastされる。tupletest.cpp #include <iostream> #include <string> #include <boost/tuple/tuple.hpp></boost/tuple/tuple.hpp></string></iostream>…
最初にソース文字列を入れて、次に正規表現を何度も試せる非常にインタラクティブかつシンプルなコード例regex_split.cpp #include <iostream> #include <boost/regex.hpp> #include <string> using namespace std; using namespace boost; int main(int argc, char* argv[]){ cout << "--input </string></boost/regex.hpp></iostream>…
boost::algorithm.splitを使う参考:Boost.String Algorithm - Faith and Brave - C++で遊ぼう #include <iostream> #include <vector> #include <string> #include <boost/algorithm/string.hpp> using namespace std; using namespace boost::algorithm; int main() { string s = "a,b.c,as/df"; vector<string> results; </string></boost/algorithm/string.hpp></string></vector></iostream>…
正規表現 http://freepg.fc2web.com/cpp/topic_boost_regex_001.html regex_match.cpp #include <iostream> #include <boost/regex.hpp> #include <string> using namespace std; using namespace boost; int main(int argc, char* argv[]){ string str = "asdftesthogehoge"; regex reg(".*t.st</string></boost/regex.hpp></iostream>…
スコープ内で宣言してスコープ外に出ると自動破棄されるmain.cpp #include <boost/scoped_ptr.hpp> #include <string> #include <iostream> using namespace std; using namespace boost; int main(int argc, char* argv[]) { scoped_ptr<string> p(new string("scoped ptrを使う")); if(p) cout << *p << end</string></iostream></string></boost/scoped_ptr.hpp>…
windowsでプレステ3のカメラを使う場合は準備が必要。macはmacamでいけるはず。 準備:VS2008 OpenCVでPlaystation3 eyeを使う 普通のUSBカメラの場合:単純にキャプチャして表示 - 橋本詳解(このコードと比較するとわかりやすい) プロジェクトごとupした …
これを基本形にしてカスタムする #include <stdio.h> #include <highgui.h> int main(int argc, char** argv) { bool isStop = false; CvCapture *capture; IplImage *image; char winNameCapture[] = "Capture"; capture = cvCreateCameraCapture(0); if(capture == NULL){ prin</highgui.h></stdio.h>…
プレステ3のカメラをWindowsのC++/OpenCV環境で使う。Macはmacamで動くし、linuxも普通にカメラとして使う事はできるらしいけど windowsはAlexさんの作ったドライバを入れるとDirectShowのソースとして使えるようになる。どうやらFlashからwebcamとしては使…
できた なんで^を付けるのかとかそこらへんの作法がわからん System::DrawingのDLLへの参照を追加してから using namespace System::Drawing; グローバル変数を作っておく private: System::Drawing::Bitmap^ shadow; C#側のためのアクセサ public: System::…
背景差分法で背景と物体を分離するコードで、opencv.jp - OpenCV: 背景統計量の累積(Accumulation of Background Statistics)サンプルコード -が大変すばらしかったので自分用に使いやすいようにいじくりまわした。 #include <cv.h> #include <highgui.h> #include <ctype.h> #includ</ctype.h></highgui.h></cv.h>…
OpenCVプログラミングブック p.154に2値画像の輪郭抽出がcvFindContourでできて、cvDrawContours で線で囲えると書いてあったので、ちょうど赤色領域抽出でカメラから2値画像を作っていたのでコードを合体させた。 輪郭抽出前に収縮・膨張でノイズを減らして…
opencvプログラミングブックのp.61肌色領域の重心を検出していたので、同じようにやってみた。この本は説明はわかりやすいけどプログラムが省略されてて肝心の変数宣言の部分や定数define部分が書いてないので大変困る。 まあドキュメント読めば十分わかるか…
cvErode()とcvDilate()を使うと砂嵐ノイズを消せる。効果はそれぞれ収縮と膨張で、収縮→膨張とすると小さなゴミは消えるし、膨張→収縮でひびわれは押し潰される。 いや2回やらなくても良い気もしてきた。 これが こうなる こういうas3のColorMatrixFilterみ…
参考 http://pw137.cs.ie.u-ryukyu.ac.jp/repos/complex_back/OpenCV_sample/tutorial_03.cpp opencvプログラミングブック p.59 グレースケールで背景差分取っておく(背景差分 - 橋本詳解) BGRをHSVに変換してからHueのみを見て肌色に近い範囲のピクセルの…
動画ファイル(aviファイル)の読み込み - OpenCV@Chihara-Lab. こうしておくとカメラの無いマシンでもtest.aviを読み込んでテストできるので便利 CvCapture *capture = NULL; //capture = cvCreateCameraCapture(0); // カメラ読み込み capture = cvCapture…
MacbookのWindowsXPでVMWareで動かしてるUbuntuでも動いた。カメラがQV-40で暗すぎるので認識部分の数値いじってある colortrack.cpp #include <stdio.h> #include <highgui.h> #include <cv.h> IplImage *img = NULL; IplImage *imgR, *imgG, *imgB, *imgThreshold_R, *imgThreshold_G</cv.h></highgui.h></stdio.h>…
前の方法だと光、影、カメラの種類などの環境変化に弱かったので、もっと相対的に赤を検出する。 cvDiv()という2つの画像の全ピクセルの商を一発で求める関数があるので、「赤の要素が青・緑それぞれの1.5倍あり、さらに赤が100以上の値のピクセル」を赤とみ…
前の肌色領域検出で、ようするにOpenCVはproce55ingみたいに泥臭くピクセルを一つずつx,y座標で走査して比較するのではなく、画像(=バイト配列)に対してビット演算する専用の関数群(cvThreshold,cvSplit,cvAnd,cvSub,cvDivなど)があるからそれを使って、…
/*** シンプルな背景差分 参考: opencvプログラミングブック p.55 ***/ #include <stdio.h> #include <highgui.h> #include <cv.h> int main(int argc, char** argv) { bool isStop = false; CvCapture *capture = NULL; capture = cvCreateCameraCapture(0); if(capture == NULL){ pri</cv.h></highgui.h></stdio.h>…