-->

2019年11月21日木曜日

OpenCVのWindow更新はメインスレッドでしかできない

ということがあったので記載しておく。
割と最近のQ&Aがあったので貼っておこう。

How to update cv::namedwindow in multi-threading environment? - OpenCV Q&A Forum

If 1 callback receives an image and performs some image-processing. How can the output image be shown in multi-threading environment? By multi-threading I mean, if that particular callback(depthCallback) can be invoked by more than one thread. And, one more query: Is using waitkey(1), optimal for real-time application?


ウィンドウの更新はメインスレッドで実施するというのが常識だそうな。

2019年10月10日木曜日

wiringpiが開発中止

ラズベリーパイのGPIO制御ライブラリであるwiringpiが開発をやめるらしい(正確にはオープンソースでの保守を停止)。

WiringPi Library To Be Deprecated

開発者はゴードンさんという方で(wiringpiのホームページに写真あり)、無断の商用使用やスパムに耐えきれなくなったからと理由を説明している。

wiringPi - deprecated...

代替ライブラリはpigpioになる?それともforkされた有志によるwiringpiが使われるようになる?

2019年9月28日土曜日

書評:「組込みエンジニアの教科書」

超初心者向けです。組み込みエンジニアって何?どういう仕事?ということがわかります。これから就職先を考える大学生や高専生向けです。
広く浅く横断的に書かれているので、組み込みエンジニアという職業の雰囲気を知るぐらいはできるかも。

2019年8月31日土曜日

OpenCVのLineIteratorの使い方

今まで知らなかったのですがOpenCVのクラスにLineIteratorというものがあります。これを使用すると、2点の座標を結ぶ線分の座標を順に辿ることができます。

汎用的な機能ではありませんが、使用目的にハマるとかなり便利な機能です。

例えば、画像上のある線分上に特定の画素値が存在するかどうかを判定することを考えたとき、その線分が水平or垂直であれば容易に線分上の座標を辿れますが、それ以外の角度の線分を辿ろうとするとチト骨が折れます。具体的には、その線分がどの程度傾いているかを調べて、三角関数を使って線分上の座標を逐一計算する必要があります。しかし、このクラスを使用するとそんな面倒な計算をすることなく線分上の座標を得ることができ、簡単に画素値を参照できます。

具体的には、以下のように使用します。

cv::Mat image = cv::imread("test.png");
cv::Point start(10,10);
cv::Point end(50,50);

// pixel check
cv::LineIterator it(image, start, end, 8);  // startからendを結ぶ線分を辿るイテレーターの作成
for(int i = 0; i < it.count; i++, ++it) {
  cv::Point p = it.pos();  // it.pos()で座標取得
  if(IsBlack(p.x, p.y, image) {  // IsBlackは座標位置の色を判定する自作関数
    // 適当な処理
    bresk;
  }
}

線分上の座標をC++のイテレータで取得できます。レーザーなどの直線運動しているものの軌道上に障害物があるか判定するときなどに使用できます。ニッチですなぁ…。

2019年7月18日木曜日

モバイルバッテリー(Quick Charge 3.0対応)から12Vor9Vを取り出す

Qualcommの充電規格であるQuick Chargeに対応したモバイルバッテリーからは、5Vだけでなく9Vや12Vを取り出せるらしい。

QC対応USBから9Vを取り出す(1) - とあるエンジニアの思考と試行 -Widlerよろしく-

Quick Charge 2.0の充電器を持っていたので、ScansnapやTEPRAといった 9V系のアクセサリを直接USBから駆動するための回路を検討した。 こちらの方がすでに実装しているので、PIC用に回路図をアレンジする。 PortをHiZにせず、1/0にて、0.6Vと3.3Vを生成するようにする。 レギュレータU1は、9V出力後もマイコンに過電圧がかからないように、 ドロップアウトの少ないものを選定する。 R1-R3は入手しやすい抵抗値で仮決め(公差大丈夫か?) PICにソフト実装。はじめてXC8でコーディング。といってもたいした事をしてるでもなく。 // PIC12F509 Con...

今まではなるべく電源を繋ぎたくない(コードレスにしたい)場合に、乾電池を使うことが多かったのですが、そうすると高い電圧を作ろうとすると場所をとったり、容量が少なかったりといった問題があります。電池交換の手間もコストもかかります。モバイルバッテリーがこの代替になれるのなら、安全ですし、コンパクトですし、充電もできるしといいことづくめです。

直近ではコードレスの12Vが必要だったので、Quick Charge 3.0対応のモバイルバッテリーを購入して試してみたいと思います。