質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Q&A

解決済

1回答

7707閲覧

OpenCvSharp3で差分を数値化して差分(動体)を自動感知したい

mnhktm

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

0クリップ

投稿2019/03/11 14:42

C# と OpenCvSharp3 でUSBカメラを使って背景に対して動くもの(動体検知)
をして写真、録画できるようなものを製作中で悪戦苦闘しています。
OpenCvSharp3はNuGetでインストールして使用中です。

コードはあっちこっちのサイトでキャプチャーできるものを探して作りました。
OpenCvSharpはよく理解しておらず、エイ、ヤーでやっています。
今はUSBカメラの映像に加え、差分のWindow(白黒)が表示できている状況です。
例えば手をかざすと手のみ。

やりたいことは、キャプチャー画像に動体があれば、画像を何らかの数値化して、
大きな変化があれば動体検知した!みたいにしたいです。

何をどのようにすれば数値化で背景に差があったことが分かるようにできるか
教えていただければと思います。数値がある値以上になると動体が映ったと
したいです。

今は、ピクチャーボックスに背景が映っており、もう一つのWindowには例えば
カメラに手をかざすと手のみが徐々に表示される状況です。
BackgroundSubtractorMOG2 を使用しています。

一部コードを記載します。宜しくお願いします。

// カメラ画像取得用のVideoCapture作成 
capture = new VideoCapture(0);は最初にしている前提です。
Mat frame;
Mat output;

~~~

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = (BackgroundWorker)sender;
BackgroundSubtractorMOG2 sbn =
BackgroundSubtractorMOG2.Create(500, 16, true);
while (!backgroundWorker1.CancellationPending)
{
capture.Read(frame);    // OpenCvSharpのピクチャーボックスの場合
sbn.Apply(frame, output); // 比較

bw.ReportProgress(0); }

}

private void backgroundWorker1_ProgressChanged(object sender,  
ProgressChangedEventArgs e)
{
pictureBoxIpl1.ImageIpl = frame; // OpenCvSharp のピクチャーボックス
Cv2.ImShow("差分 Window", output); // 差分ウィンドウ 動体差分のデータ(映像)
}

以上

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こことか参考になりませんか?
また、OpenCvSharpだけではなく「OpenCV 動体検知」で検索すれば、他言語ですがサンプルは出てくると思いますので、考え方の参考になると思います。

投稿2019/03/13 23:05

YAmaGNZ

総合スコア10251

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnhktm

2019/03/16 04:36

ご回答ありがとうございます。 仰る通り、OpenCvSharpに拘らず、OpenCv C++ で調べて該当するクラス やメソッドをOpenCvSharpで調べて適用する方が得策(近道)のように 感じます。C++ で調べると、1つ前のフレームと新しいフレームを SubStract で比較するように書かれていました。 ご紹介のOpenCVSharpによる差分検出方法も参考になります。
mnhktm

2019/03/17 10:48

「こことか参考になりませんか?」をよく見てみると、 private double TakeBackgroundImage()の中にある、 valueBackground = Cv.Norm(trimmedFrame, null, NormType.L1); これです!これ! Cv.Norm で数値がとれます。  OpenCvSharp3 では Cv2.Normなので動かしてみるとうまくいきました。 カメラのフレーム画像から一定の変化をしるため、数値の変化がわかります。 ノーマル画像、エッジ画像、差分画像でも問題なく取れます。 YAmaGNZさん、ありがとうございました。解決です!。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問