UVCカメラ対応

先日、WEBカメラなどUVC規格のカメラを使用する案件を行いました。

いつもはUVCカメラのアクセスはOpenCVで行っていたのですが、OpenCVで露光やフォーカスなどのサポート有無や値範囲の取得方法が分からず(対応いていない?)、しかたないのでDirectShowを使用しました。

DirectShowのCOMオブジェクトを直にアクセスして操作するのはなかなか大変でしたが、良い経験になりました。
ライブラリ化を行ったので今後の案件では楽に使用できそうです。

スマートフォンのカメラ

こんにちはmtjです

ふらっと実家に戻ったり水族館等に行った時にスマートフォンのカメラを使うのですが
本当普段遣いするなら安いデジタルカメラなんていらないような性能をしています。

ふとスマホ用のPLフィルタで反射除去をしてみようと思ったのですが あまりうまく行きませんでした
やはりそういったフィルタを付けての本格撮影ならレンズフィルターが使えるカメラを使うべきなのかもしれませんね。
安いデジタルカメラはスマホに負けてしまうので今は高めのデジタルカメラが主流のようですね。

本格的でなくともスマートフォンという小さい機器1つにそのような機能(カメラ、音楽プレイヤー、PC、GPS)が入っているのは
すごい話だなと改めて実感します。

タプルを用いた値の交換

2つの値を交換したい時、皆さんはどのようにしていますか?

私は本日、以下のように愚直に行っていました。

var x = 1;
var y = 2;
var tmp = x;
x = y;
y = tmp;

スマートでないな~と思っていたのですが、
コードレビューにて同様の処理をタプルを用いて以下のように記述できるとの指摘を受けました。

var x = 1;
var y = 2;
(x, y) = (y, x);

う~ん、これはスマート!
(シンプルで可読性が高くて良いですね!)

タプルの構築と分解代入の複合により実現されるようです。
少し調べてみたところ、
コンパイル時には以下のような具合に最適化されるようです。

var tmp1 = y;
var tmp2 = x;
x = tmp1;
y = tmp2;

コンパイラも賢いですね!

今後もこのような知見を活かしてコードをシンプルに保てるようにしたい所存です。

(参考)
以下のサイトを参考に一部コードを引用させていただきました。
ありがとうございました。

複合型の分解 – C# によるプログラミング入門 | ++C++; // 未確認飛行 C