この記事はOpenCV Advent Calendar 2015の14日目の記事です. はじめに OpenCV 3.0からレンジの要素すべてに指定された関数を適用するcv::Mat::forEachメソッドが追加されました.詳細は公式ドキュメントを参照ください. また,この機能はkazuki-ma氏によって実装が行われたものであり,Pull Requestのやり取りはhttps://github.com/Itseez/opencv/pull/2117にて読むことができます. 普段C++(C++11以降)を使っている方だとstd::for_eachのMat版みたいなものと考えるとイメージしやすいかもしれません. cv::Mat::forEachメソッドの内部処理 ということで,modules/core/include/opencv2/core/utility.hppにあるMat::forEa
Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習posted with カエレバJake VanderPlas オライリージャパン 2018-05-26 Amazonで探す楽天市場で探すYahooショッピングで探す 目次 目次 はじめに C++からmatplotlibのグラフ描画機能を使うヘッダライブラリ: matplotlib-cpp コンパイル方法 Makefile CMake matplotlib-cppの使い方 標準的なPlot関数の使い方 複数のプロットをする グラフの凡例の表示 グラフの表示範囲を設定する 軸のタイトルやグラフの名前を設定する グラフを保存する アニメーションを表示する方法 最後に 参考資料 MyEnigma Supporters はじめに C++で複
このページはC++11に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。 概要 「委譲コンストラクタ (delegating constructors)」は、コンストラクタから、同じクラスの他のコンストラクタに処理を委譲する機能である。 class X { int i_; public: X(int i) : i_(i) {} // (1) : int型のパラメータを受け取るコンストラクタ X() : X(42) {} // (2) : デフォルトコンストラクタ。 // (1)のコンストラクタに初期値を渡して初期化処理を委譲する }; (2)のコンストラクタでの、X(42)の部分が委譲コンストラクタに当たる。(2)のコンストラクタから(1)のコンストラクタを呼び出し、初期化処理を(1)のコンストラクタに集約している。
-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror -Wno-unused project(detox) cmake_minimum_r
C++ でテンプレートを使えば静的にポリモーフィックな Duck Typing というか,ある構文が有効であれば継承関係も何も無くても O.K. (専門用語で言えば,あるコンセプトのモデルを全て受け付ける)というコードを書くのは非常に簡単.ただし,一方で静的多相であること(コンパイル時決定であり,型の情報を引きずり倒さなければならない)が欠点となる状況も多い.動的多相が実現できない,コードの肥大化(code bloat)がある,など. #後日注釈 (2005/11/17):実装をヘッダに書かないといけないという制約も大きい. 一方で C++ において,継承関係のないクラス間で動的多相を行う手法がないかというとそういうことはない.これを実現する技法は自分が知っている範囲で2つ.どちらも個人的に「型消去 (Type Erasure)」と呼んでる(で,実際にそう呼ばれることがある)技法. 1つは
背景 float や double のビット表現に触れたい時って多いですよね? しかし,それらの型ではビット演算は行えません.ポインタは reinterpret_cast で変換できるのですが,値そのものは変換できません.かといって一旦ポインタを経由するのも格好悪いです. 作ったもの そこで,C++11 で覚醒した union を使って,以下のようなキャストもどきを作りました. template<typename T, typename U> union raw_cast { public: constexpr raw_cast(T t) : t_(t) {} operator U() const { return u_; } private: T t_; U u_; };
このページはC++11に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。 概要 メンバ関数のCV修飾は、*thisがconst/volatileである場合とそうでない場合でメンバ関数をオーバーロードできる。 同じように、メンバ関数に対して&もしくは&&の参照修飾子を付加することで、*thisが左辺値である場合に呼び出されるメンバ関数のオーバーロード、*thisが右辺値である場合に呼び出されるメンバ関数のオーバーロードを定義できる。 これを使用することで、「一時オブジェクトな*thisに対して特定のメンバ関数を呼び出せてはならない制約」、「*thisが左辺値もしくは右辺値である場合の効率的な実装を使い分ける」といった設計ができるようになる。 struct X { // 代入演算子は、*thisが左辺値である場合のみ呼び出
背景と導入 何十年もの間、CやC++の標準規格は、マルチスレッディングや並行処理を「その標準の範囲を超えたもの」として扱ってきました。標準規格の目的である”抽象機械”の力が及ばない、”対象依存”という影の世界においてです。メーリングリストやニュースグループの質問には並行処理に関するものが山ほど寄せられましたが、それらにすぐに突き返された回答は「C++はスレッドには関知しません」という何とも冷淡なものでした。この件によって当時のことを思い出す人々は、今後も絶えないでしょう。 しかしC++11の登場で、そんな状況に終止符が打たれたのです。C++標準化委員会は、時代の流れに乗らないと、この先C言語が取り残されてしまうと悟ったのでしょう。彼らはスレッドや同期メカニズム、アトミック操作、メモリモデルなどの存在に、ようやく気付いたわけです。そして標準規格として、C++コンパイラやライブラリのベンダーに
← Why should I have written ZeroMQ in C, not C++ (part I) Just to be clear from the very beginning: This is not going to be a Torvalds-ish rant against C++ from the point of view of die-hard C programmer. I've been using C++ whole my professional career and it's still my language of choice when doing most projects. Naturally, when I started ZeroMQ project back in 2007, I've opted for C++. The main
OpenCVに、なんとログ出力用のクラスがあります。しかもflannの中にです。伏兵過ぎますね。 ごく簡素な実装なのですが、紹介します。 定義 わかる方はこれをご覧になって下されば、以下読まなくて良いです。flannの中にいてもflann臭さは全く無く、ヘッダのみで実装が完結しています。 opencv/logger.h at master · Itseez/opencv · GitHub OpenCV 2.4.10, 3.0, 3.1で存在を確認しました。ここ最近のバージョンならばどれでも大丈夫そうです。 使い方 include 明示的に指定が必要です。 #include <opencv2/flann/logger.h> using namespace cvflann; // 以降のコードはこれ前提 準備 cvflann::Loggerというクラスが担当します。プログラムのどこからでも呼べ
テンプレートを書いていて、推論された型を確認したい テンプレートを記述していると 「この引数を与えたときには、Tがどう推論されるのか?」 なんて思うことは良くありますよね? 嗚呼、そんなとき、どーしたらよいのでしょーか? たとえば template < typename T > void f(T&&){} void g(int const&){}; int main(){ f(g); } この場合のTがどう推論されるのか知りたい! と思ったとき、どうしますか? 諦める IDEに頼る typeid.name()を使う Boost.Typeindexを使う Attributeを使う(C++14) IDEに頼る フォーカスすると情報が表示されるのを利用する IDEを使っている場合は概ねこれで事足りる typeid.name()を使う ヘッダをインクルードして この方法では実行時までわからない型情
動機 C++11でカジュアルにスレッドが作れるようになったのに、そのバリア同期手段はboost::barrierかpthread_barrierぐらいしか使えなくてもっと依存のないポータブルな実装が欲しい事があったので書き捨てたものを公開。 condition_variableとnotify_allを使った物が一般的だけれど、短時間で同期できることがわかっている場合にはスピンによる待機が一番パフォーマンスが出るのでスピンにした。 実装 The Art of Multiprocessor Programmingのセンス反転バリアをそのまま実装した。 スレッドローカルストレージをクラスごとにポータブルに作る方法が分からなかったし、そもそもスレッドは開始時にTIDを渡しているのでそれをwait()の引数に渡すようにした。 やりたい事はbooleanの反転だったけれどstd::vector<boo
ということで、要は Emacs for C++の環境を実際に構築してみました、というだけですが、こちらの記事には実際の設定方法などが詳しく書かれていないので、その辺りを中心に紹介したいと思います。 なお、使用環境はOSがUbuntu 14.04 (X環境)、Emacsは個人的には25.1.50.2 (snapshot版) ですが、この記事の内容についてはUbuntu 14.04付属の24.3でも動作することを確認しています。 準備 まず、環境構築に必要となるパッケージを入れておきます。Ubuntu 14.04ならapt-getで入れるだけです。 cmakeでプロジェクトをビルドできるようにする cmakeは、autoconfのようなMakefileを生成するためのツールです。コードの補完やタグジャンプを正確に行うには、インクルードパスやプリプロセッサ設定などのビルド条件をきちんと指定する必
ビットフィールドとは C/C++にはほとんど使われてないがビットフィールドという機能がある。 union { uint8_t raw; struct { unsigned FAULT_QUEUE : 2; unsigned CT_PIN_POLARITY : 1; unsigned INT_PIN_POLARITY : 1; unsigned INT_CT_MODE : 1; unsigned OPERATION_MODE : 2; unsigned RESOLUTION : 1; }; } config; このように書ける。struct 内で名前の後ろについているのが、そのフィールドで消費するビット数で、この場合合計で8bitになり、それを uint8_t と共用している。 こうすると config.OPERATION_MODE = 2; などと、マスクやシフトを伴わずに直接書けて、結果
この記事は 初心者C++er Advent Calendar 2015, Qiita C++ Advent Calendar 2015 15 日目の記事です. 注意 UbuntuもしくはMac OSXの環境が作れない方はそっと閉じてください。(VagrantでUbuntuはすぐ準備できる) スマホアプリ畑の人間が書くので、それに向けた内容も多くなっています。 PCからの閲覧をおすすめします。スマホで読むと、コードのレイアウトが崩れるようなので。 ビルドツールについて みなさんはビルドオートメーションツールには何を使っていますか? 玄人界隈ではcmakeが定番です。 私が携わっているプロジェクトではgypと呼ばれるツールを使っています。 元々Chromiumで開発されていたGoogleのオープンソースの一つで、node.jsにも使われているビルドツールです。 特殊なフォーマットに従ってファイ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く