アフィリエイト広告を利用しています
ファン
検索
<< 2023年12月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
最新記事
(12/20)KI cad インストールしてみよう
(04/11)【JAVA】チョロメを外部から動作させます。 幽霊が操作してるような
(07/29)spartan3 を cy7c68013 のバルクライトで シリアルコンフィグしてみた
(07/28)ブログ村に参加してみた。いまとのころブログ村からはだれもこない^^;
(07/28)PIC16F1503 を使ってみようかな?? MPLAB 内部クロック
(07/01)からっぽのつぎ のページ きっとはげ に なんか作用するかも
(05/06)GCEでワードプレス 第2 困ったのでやり直し手順
(05/05)https://certbot.eff.org/lets-encrypt/centosrhel7-apache をみてハマったこと
(04/28)フェドラ をつかって switchbot をアクセス する。  ? 未解決
(04/02)【オープンVPN】setsebool -P openvpn_enable_homedirs 1 でうごいた
(04/01)【QT5】わからないのでタイムアウトで自動でキャンセルボタン押すメッセージボックスつくってみた
(03/31)qt5よくわからんのだが メッセージボックスの OKスイッチをタイマーで押してみた。
(03/09)【boost】message queue 使い方 目も目も
(03/08)【バカの一つ覚え】ユニークID作成とそのちょっとした応用
(03/04)【パソコン】【GPIO】いったいこれは?
(02/26)【VHDL入門】ABZ信号から Hsync Vsyncを作り出してみよう その2
(02/26)【VHDL入門】ABZ信号から Hsync Vsyncを作り出してみよう その1
(02/26)【VHDL入門】速度比較 エンコーダーABZ相 ソースファイル付き
(02/25)【VHDL入門】ロータリーエンコーダABZ 出力のサンプル 200Mhz動作?
(02/23)【VHDL入門】UART 送受信繰り返しのテストベンチ作成してみたい
最新コメント
カテゴリーアーカイブ
プロフィール
有象無象さんの画像
有象無象
はげはじめました 禿増されます。励ましのコメントお待ちしてます。  
プロフィール

広告

posted by fanblog

2021年01月29日

opencv c++ Qt5 始めます。今日は パターンマッチングの 

みなさんこんばんは
 今日から オープンCVを使うことにします。

 パイソンなどはわかりません 読めませんし書けません C++ならなんとかかんとかわかります 。

 想定するシステム
 OS フェドラ ライブCD モディファイ
 開発環境 OPENCV C++ boost libarary
 動作チェック環境 QT5

 なぜそうしたか QT5は WINDOWSでも LINUXでも動作します。
 C++は WINDOWSでも C++でも 動作します。

組み込みでは見えないので 見える形に Qt5で 表示します。
  OPENCV と QT5の 非互換部分は MATが BGR でRGBでないというだけです。

 MATと QIMAGEは 簡単に 変更できます。 そんなこんなです。

 今後の予定 
  フェドラのライブCDを 改めて モディファイします。
  今日の予定

 今日はつれづれなるままに パタンマッチングを OPENCV GPUで行います。
 だれかのお役に立つかしら?

  OPENCVは ここ
でコンパイルしたものを使う

オープンCVのフォーマット をQImageに変換するには

まず RGBへ変更してから
cv::Mat BGR2RGB(cv::Mat m_src)
{ cv::Mat srcRGB;
cv::cvtColor(m_src, srcRGB, cv::COLOR_BGR2RGB);
return srcRGB;
}
QImage tmpimg = QImage(matRGB.data, matRGB.cols, matRGB.rows, static_cast(matRGB.step), QImage::Format_RGB888);


これで QImageに変換できる。
 接点は ここだ 
GPUつかうと 戻り値に CV_32Fがときおりある。これが鬼門で

double minVal,maxVal;Point minLoc,maxLoc;
minMaxLoc( resoltclone, &minVal, &maxVal, &minLoc, &maxLoc );
(resoltclone).convertTo(dst,CV_8U,255.0/(maxVal-minVal),-minVal);
cv::cvtColor( dst.clone(), img_Result, CV_GRAY2BGR );

こんな感じで GBRに変更すると QTに簡単に表示できる。
 今日のところは CV Mat での BGRを QImageに変更する。
しばらくは RGB の値が同じ3チャネルをQImageの モノクローム扱いで逃げ切る。


 いよいよGPUを使ったパタンマッチングだ。

ところで QTを使わないことを想定して
 便利な QUEUE 作ってみた  このキューで スレッド間の 連絡ができる。

#ifndef LOCKEDQUEUE_H
#define LOCKEDQUEUE_H
#include <atomic>
#include <queue>
#include <mutex>
#include <boost/filesystem/convenience.hpp>
#include <boost/interprocess/sync/interprocess_semaphore.hpp>
#include <thread>
template<class X>
class LockedQueue
{
public:

LockedQueue()
{
sem = new boost::interprocess::interprocess_semaphore(0);
flg_flush = false;
end = false;
}
virtual ~LockedQueue()
{

end = true;
sem->post();
sem->post();
sem->post();

}
void quit()
{
m.lock();
end = true;
sem->post();
m.unlock();
}

void enqueue(X x)
{
m.lock();
data.push(x);
sem->post();
m.unlock();
}

int dequeue(X * ret)
{
int retv=0;
sem->wait();
m.lock();
if (end)
{
end = false;
m.unlock();
return -1;
}
*ret = data.front();
data.pop();
m.unlock();


if (ret == nullptr)
{
return -1;
}

if (end) return -1;
return retv;
}

std::atomic_char16_t end;
std::mutex m;
std::queue data;
boost::interprocess::interprocess_semaphore *sem;
std::string eod;
std::string *ret;
std::atomic_bool flg_flush;
};

#endif // LOCKEDQUEUE_H


これで シグナル飛ばさなくても 繋がります。
テストは


lq= new LockedQueue();

std::thread *a=new std::thread([this]()
{
lq->enqueue( "aaa");
lq->enqueue( "heo");
lq->enqueue( "ddd");
lq->enqueue( "aaa");
lq->enqueue( "aaddda");
}
);
std::thread *b=new std::thread([this]()
{
while(true){

std::string str;
if(lq->dequeue(&str)==-1){break;}
std::cout << str<join();
a->join();


動作テストは 

aaa
heo
ddd
aaa
aaddda


クラスはテンプレート 使ってるので このキューは ポインタでも遅れます。

 スレッド間を このパイプで ポインタでもなんでも 送れるし ウェイトないので テキパキ動作します。

 コテコテの使い方としては  new したクラス (インスタンスを キューにいれて おくります
 それぞれ別スレッドでうごかせば キューのなかで 動作しならが 受け取りがのキューに いきます
ここで デリートするなんて 使い方もできるかもしれません。








この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/10504254
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は30日以上新しい記事の更新がないブログに表示されております。