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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

4662閲覧

途上opecvでの連続撮影

yamata

総合スコア36

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/12/01 07:19

編集2016/12/01 09:04

opencvで静止画を30fpsで連続撮影を行いたいです。

現在は、使用しているカメラ(IMAGINGSOURCE社 産業用USB3.0カメラ)のIC Capture
を使用しているのですが、PCの性能上フレーム落ち(こま落ち)がひどいため、改善したいと考えています。

そこで、opencvで30fpsで連続撮影を行い、撮った画像をハードに保存するのではなく、メモリにコピーしておき、全ての撮影終了後にハードに保存することで、フレーム落ちを減らすことができないかと考えています。

opencvでの30fpsでの連続撮影のプログラムを教えていただけたらと思います。また、約1000枚近くの画像を、メモリにコピーしておくことは可能でしょうか?
もし可能であれば、その部分のプログラムも含めて教えていただけたらと思います。

opencv2.4.9を使用しています。よろしくお願いします。

リンク内容

以上のページを参考しています。

使用用途上、動画から静止画切り出しは実行しにくいです。
撮影時に、フレーム落ちを減らす方法があれば教えてほしいです。

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

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

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

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

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

MasahikoHirata

2016/12/01 07:38

まずマシンのスペックとかも開示された方が良いのでは?またカメラの解像度なども。それは平均的な1画面の容量を知る為に必要なのでは。参考までに私の環境ではLマイクロソフトのLife-CAMを1920x1080で使用して33fpsで一画面が約2.3Mです。yamataさんは1000枚と仰ってるので単純に計算しても2.3Gi以上のメモリーを必要としますね。手っ取り早くSSDで高速なドライブを実現された方が良いのでは?(PCのメモリーは今後何かのアプリで占有される可能性も否定できませんし)
can110

2016/12/01 07:50

カメラ付属ツール・SDKやフリーツールで動画保存→静止画切り出しも検討してはいかがでしょうか?
yamata

2016/12/01 07:53

私も、メモリーが不足することを考えていませんでした。高速ドライブを実現とはどのような意味でしょうか?
yamata

2016/12/01 07:56

なるほど。検討してみたいと思います。フレーム落ちの可能性を減らすことが出来るのでしょうか?
can110

2016/12/01 08:02

マシンスペックや動画コーデックによるので断言できません。まずは試してみては?
yamata

2016/12/01 08:12

試したいと思います。やり方を調べているのですが、opencvでないと出来ないのでしょうか?フリーソフトなどもあるのでしょうか?
can110

2016/12/01 08:23

回答欄に記載します。
guest

回答3

0

カメラ付属ツール・SDKなりを利用して、動画保存→静止画切り出しを検討してはいかがでしょうか?

提示されている製品名などから、以下のツール・SDKが利用できるかと思います。
The Imaging Source ダウンロードサイト

投稿2016/12/01 08:26

can110

総合スコア38262

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

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

yamata

2016/12/01 08:49

IC Imaging Controlは私自身、使いこなせていません。その他で、行う方法はないでしょうか?
can110

2016/12/01 09:03

私なら、まずは付属・公式のツール・SDKを調査し利用できないか努力しますが。 目的に沿わないようであれば、これ以上回答できることは私にはありません。
yamata

2016/12/01 09:23

すいません。ありがとうございました。
guest

0

ともかくまずはフリーラン:表示やキー入力待ち等を一切行わず、ひたすらframeをカメラから読み出すコード書いて走らせました? それで毎秒30frame回せなかったらどう頑張っても無理やし。

それと、1-frameでどれだけのメモリを必要としますか? 1-frameで1MBとすると1000枚で1GBのメモリが必要、
それだけのメモリをあらかじめ確保できますか?

投稿2016/12/01 07:28

episteme

総合スコア16614

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

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

yamata

2016/12/01 07:45

ICCaptureというソフトで30fpsでまわせることが分かっているのですが、やってみます。 なにも処理を行わずに、ひたすらフレーム数を呼び出すということでしょうか?一応、opencvでも、使用するカメラが30fpsで撮影可能なことは確認しあります。 確かに、考えていませんでした、、、 他にフレーム落ちを減らす方法はありますか?
yamata

2016/12/01 07:52

一応、30fpsのフレームレートを得られることをopencvで確認はしてあります。ですが、ひたすら走らせることはやっていないのでやってみたいと思います。なにも処理を行わずに、30fpsの撮影するプログラムがわかりません。 すいません。そこまで考えていませんでした。なにか方法はありますか?
guest

0

ベストアンサー

’フリーソフトなどもあるのでしょうか?’
私が普段使っていてopencvのvideo libraryより速いのがフリーのソフト(というか面白いことにheaderファイルとして存在している)のがewclibと同じ作者のesplib。ベクターなんかにあるますよ。しかしopencvのバージョンによってはBGRAとBGRの変換がうまくいかなかったりで自分で変換の関数つくったりしました。一度ページを見ると面白いでしょうね。
実際にはewcの関数使ってカメラからの映像を一旦bmpで保存(保存先はSSDのドライブ)で、その後、opencvでゆっくり処理してます。

ESCを押すか1000枚撮影まで撮影のサンプル

C++

1 int i; 2 char OUTBIN[50]; 3 i = 0; 4 //画像入力&表示 5 for (;;) { 6 if (ESP_STOP) break; 7 if (EWC_IsCaptured(0)) { 8 EWC_GetImage(0, ESP_VramPtr[0]); 9 ESP_Update_(0); 10 sprintf(OUTBIN,"%d.bin",i++); 11 fileerror = fopen_s(&fp, OUTBIN, "wb"); 12 fwrite(ESP_VramPtr[0],EWC_GetBufferSize(0) , 1, fp); 13 fclose(fp); 14 remove(CRFILE); 15 ESP_Locate(0, -1); 16 ESP_Printf("FPS:%f", 1.0 / ewc_s[0].ftime); 17 } 18 if (ESP_GetButtonBox(0)) EWC_PropertyPage(0); 19 if( i > 1000 ) 20 break; 21 } 22 23 r = EWC_Close(0); //カメラ終了 24 ESP_Printf("\nEWC_Close(0)=%d\n\n", r); 25 ESP_DestroyImage(0); //ウィンドウ終了 26 27``` 28 29![イメージ説明](6b768b4542ff7ee328dd150ca54f46ec.png) 30下が正解。

投稿2016/12/01 08:51

編集2016/12/02 03:29
MasahikoHirata

総合スコア3747

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

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

yamata

2016/12/01 08:55

使い方がよくわかっていないのですが、このソフトをopencvで動かすということでしょうか? また、そのためのプログラムも全てopencvで行うということでしょうか?
MasahikoHirata

2016/12/01 09:02

私は単体で動かしました。一応、opencvとの連携の例もページで示されています。
yamata

2016/12/01 09:16

非常に興味深い物でした。30fpsでの画像の連続撮影だけをesplibで行いその後の、テンプレートマッチングなどは、opencvで行うことも可能とあったのですが、 30fpsでの静止画の連続撮影を教えてはいただけないでしょうか?
MasahikoHirata

2016/12/01 09:22

良いですよ。後にこの回答欄を修正してサンプルソースを載せます。ちょっと作成するので待ってください。またewclibならカメラの輝度や彩度、フォーカスなどの設定もopencvなどと比べれば格段に使いやすいです。また'.h'の形なので必要な部分だけ無駄なく実装できますし。
yamata

2016/12/01 09:45

ありがとうございます。よろしくお願いします。
yamata

2016/12/01 10:06

ありがとうございます。 現在、 http://www.geocities.jp/in_subaru/esplib/help/part1.html のページを参考に環境を整えているのですが、書いてあることをやっても esplib.hのソースファイルが開けませんというエラーが出ます。 私のミスだとは分かっていますが、どこに原因があることが多いでしょうか?
MasahikoHirata

2016/12/01 10:55

ヘッダーでしょ?プロジェクトのソースのディレクトリにESPLIB.Hは置いてありますか?
MasahikoHirata

2016/12/02 01:23

参照のページを見ると'#include <esplib.h>'。コンパイラのC++の’追加のインクルードパス’に'ESPLIB.H'を格納しているパスを追加してください。
yamata

2016/12/02 03:03

追加したのですが、#include "stdafx.h"を追加しろとエラーが出て、追加したのですが、未解決の外部シンボル_mainが関数_tmainCRTStartupで参照されました。とエラーが出ます。 esplib.hはディレクトリに置いてあります。
MasahikoHirata

2016/12/02 03:30 編集

’未解決の外部シンボル_mainが関数_tmainCRTStartupで参照されました。’プロジェクトを作成する’時に’回答’の画像を参考に選んでください。
yamata

2016/12/02 03:24

作り直したところ、 COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。 というエラーがでるようになりました。
MasahikoHirata

2016/12/02 03:32

それはリンカーのエラーです。設定をもう一度、EWCLIB及びESPLIBのヘルプをよく読んで確認されてください。(私も初めに引っかかりました)
yamata

2016/12/02 03:42

インクリメンタルを有効にするを、いいえに変更したところ実行できました。 ありがとうございます! プログラムについていくつか教えていただきたいのですが、画像の撮影保存はどの箇所になるのでしょうか?また、30fpsで撮影という数値を変更することも可能でしょうか?
MasahikoHirata

2016/12/02 03:48

EWCLIBのヘルプの中の’フォーマット情報を取得してからカメラを使用する例’を試してみてください。この中でfpsなどの設定がカメラ情報から選択できます。映像保存は回答の例の中’ fileerror = fopen_s(&fp, OUTBIN, "wb");’で’OUTBIN’にファイル名、その後、’ fwrite(ESP_VramPtr[0],EWC_GetBufferSize(0) , 1, fp);’でファイルに出力しています。
yamata

2016/12/02 03:59

すいません。EWCLIBのヘルプの中に’フォーマット情報を取得してからカメラを使用する例’という項目がないのですが、 OUTBINにファイル名とありますが、ファイル名をImage0001のように連番に順番をつけることも可能でしょうか?
yamata

2016/12/02 04:01

すいません、ありました。
MasahikoHirata

2016/12/02 04:02

’Image0001のように連番に順番をつけることも可能’です。’フォーマット情報を取得してからカメラを使用する’は http://www.geocities.jp/in_subaru/ewclib/help/ewclib24_help.html の中、’//対応フォーマットの一覧を表示し,フォーマットとFPSを指定して画像入力’で検索してみてください。
MasahikoHirata

2016/12/02 04:03

先ずは例を動作させて、内容を確認されると以後使えるライブラリ?(ヘッダーだけど)で役に立つと思いますので。
yamata

2016/12/02 04:17

ありがとうございます。 'qedit.h': No such file or directoryというエラーが出て調べているのですが、Windows SDKが必要であり、私は、v7を使っており、7からだと使えないと見たのですが、6をダウンロードする必要があるのでしょうか?
MasahikoHirata

2016/12/02 04:23

いえいえ。'qedit.h'を入れるだけ。ありかは続いてコメントします。
yamata

2016/12/02 04:39

6からコピーしないといけないみたいなので、ダウンロードしたいと思います。 また、後でわからないことがあれば教えていただけたらと思います。
yamata

2016/12/02 07:21

すいません。環境を整えることが出来ませんでした。v7をダウンロードし、v6にある'qedit.h'をコピーしようとしています。 しかし、VC++で、プラットフォームツールをv100からWindows7SDKに変更しようとしているのですが、選択できません。 もう少し時間がかかりそうです。
MasahikoHirata

2016/12/02 13:50

頑張って下さい。きっと後々に役立つモジュールですので。逆に手間を掛けさせ申し訳ない。これを超えるとvc++で容易にアプリが作れます。(opencv込みで。ただしnamespaceのバッティングに注意)
yamata

2016/12/05 07:49

大変、遅くなりました。無事に使用できるようになりました。 また、わからないことがあれば質問させていただきます。 ありがとうございます。
MasahikoHirata

2016/12/06 05:07

ファイル名を連番で作製して保存すれば出来ると思いますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問