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

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

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

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

OpenCV

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

Q&A

解決済

1回答

7997閲覧

x64のreleaseでOpenCVのCv2.VideoCapture()を早くしたい

ysyk77

総合スコア4

C#

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

OpenCV

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

0グッド

1クリップ

投稿2021/09/13 01:35

前提・実現したいこと

Visual Studio Express 2017 for Windows DesktopでOpenCvSharp4を使用し、WEBカメラで画像を表示するソフトを作成しています。
この時、ビルドの設定により、OpenCVの動作スピードが変わってきます。
以下が添付のソースを実行したときの結果です。

①Release,X64
VideoCapture Start !
VideoCapture: time=8446 [msec]
capture.IsOpened: time=0 [msec]
NamedWindow: time=0 [msec]
Mat: time=0 [msec]

②Debug,X64
VideoCapture Start !
VideoCapture: time=215 [msec]
capture.IsOpened: time=0 [msec]
NamedWindow: time=0 [msec]
Mat: time=0 [msec]

x64のreleaseモードでビルドすると、Cv2.VideoCapture()がすごく遅くなります。
debugが215msecに対しReleaseが、8.4秒となります。
x86の時は、Release,Debugのモードに関係なく、x64のDebugに近い感じです。

ただ、実際のカメラ動画表示は、x64のReleaseが一番スムーズに行え、他はカクつきます。
x64のreleaseモードでOpenCVのCv2.VideoCapture()を早くすることが出来ないでしょうか?

よろしくお願いします。

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using OpenCvSharp; 11 12namespace cam_test 13{ 14 public partial class Form1 : Form 15 { 16 public Form1() 17 { 18 InitializeComponent(); 19 } 20 21 private void camCapture() 22 { 23 // public VideoCapture capture; 24 VideoCapture capture; 25 string name = "capture"; 26 27 var sw = new System.Diagnostics.Stopwatch();// Stopwatchクラス生成 28 sw.Start(); 29 Console.WriteLine("VideoCapture Start !"); 30 31 capture = new VideoCapture(0); 32 Console.WriteLine("VideoCapture: time={0} [msec]",sw.ElapsedMilliseconds); 33 sw.Reset(); 34 35 if (!capture.IsOpened()) return; 36 Console.WriteLine("capture.IsOpened: time={0} [msec]",sw.ElapsedMilliseconds); 37 38 sw.Reset(); 39 Cv2.NamedWindow(name, WindowFlags.Normal); // 画面表示 40 Console.WriteLine("NamedWindow: time={0} [msec]",sw.ElapsedMilliseconds); 41 42 sw.Reset(); 43 var img = new Mat(); 44 Console.WriteLine("Mat: time={0} [msec]",sw.ElapsedMilliseconds); 45 46 while (true) // キャプチャーループ 47 { 48 capture.Read(img); 49 if (img.Empty())break; 50 Cv2.ImShow(name, img); 51 if ( Cv2.WaitKey(1) == 27) break; // ESC キーで閉じる 52 } 53 Cv2.DestroyWindow(name); 54 } 55 56 private void btnCapture_Click(object sender, EventArgs e) 57 { 58 camCapture(); 59 } 60 } 61} 62

補足情報(FW/ツールのバージョンなど)

・Visual Studio Express 2017 for Windows Desktop
・OpenCvSharp4.Windows
バージョン:4.5.3.20210817

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

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

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

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

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

yumetodo

2021/09/14 16:22

DebugとReleaseの結果を取り違えていませんか? あと計測するべきはcapture.Readの速度では?
ysyk77

2021/09/14 23:40

ご指摘、ありがとうございます。 > DebugとReleaseの結果を取り違えていませんか? 再現性があり、特に間違ていないです。 > あと計測するべきはcapture.Readの速度では? 時間がかかっているのは、VideoCapture()で、これを何とかしたいです。 あと、VideoCaptureAPIsで色々オープンモードを選べます。 このモードにより動作が変わってきました。 今回のReleaseモードでは、 capture = new VideoCapture(0,VideoCaptureAPIs.MSMF); となったのでは無いかと思います。 このモードでは、オープンは遅いのですが、フレームレートはコマ落ちせず表示が出来ました。 その他は、オープンは早いのですが、コマ落ちが発生してしまいました。 どうも、VideoCapture(0)とモードを指定せずに使用すると、自動的にモードを設定しますが、Buildモードや環境により、どのモードでオープンされるかが違っているのが原因では無いかと推定します。 その為、質問の内容が少し的外れ見たいなので、解決済みで閉じさせて頂きまたいと思います。
guest

回答1

0

自己解決

上の内容と重複します。

VideoCaptureAPIsで色々オープンモードを選べます。
このモードにより動作が変わってきました。
今回のReleaseモードでは、
capture = new VideoCapture(0,VideoCaptureAPIs.MSMF);
となったのでは無いかと思います。
このモードでは、オープンは遅いのですが、フレームレートはコマ落ちせず表示が出来ました。
その他は、オープンは早いのですが、コマ落ちが発生してしまいました。

どうも、VideoCapture(0)とモードを指定せずに使用すると、自動的にモードを設定しますが、Buildモードや環境により、どのモードでオープンされるかが違っているのが原因では無いかと推定します。

その為、質問の内容が少し的外れ見たいなので、解決済みで閉じさせて頂きます。

投稿2021/09/14 23:44

ysyk77

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問