[解決済み] OpenCVをPythonとC++でコーディングした場合、性能に違いはあるのか?
質問
少しずつopencvを始めようと思っているのですが、まずOpenCVのどのAPIが便利かを判断する必要があります。Pythonの実装はC++のネイティブな実装に比べれば短いですが、実行時間はより密で遅くなると予想しています。これらの2つの視点の間のパフォーマンスとコーディングの違いについてコメントできる知人はいますか?
どのように解決するのですか?
Pythonはシンプルで移植性が高く、さらに創造性に富んでいるため、ユーザーはプログラミングに悩まされることなく、アルゴリズムだけを気にすればよいのです。
しかし,ここOpenCVでは違うことがあります.Python-OpenCV は,オリジナルの C/C++ コードのラッパーに過ぎません.これは通常,両言語の優れた特徴を組み合わせるために利用されます. C/C++のパフォーマンスとPythonのシンプルさ。 .
つまり、PythonからOpenCVの関数を呼び出した場合、実際に実行されるのはC/C++のソースになります。そのため、パフォーマンスにはあまり差がありません。OpenCVのいくつかの基本的な関数で概算してみると
最悪の場合
のペナルティがあります。
<4%
.
penalty = [maximum time taken in Python - minimum time taken in C++]/minimum time taken in C++
).
例えば,OpenCVで利用できない独自の関数を作成している場合,事態はさらに悪化します.そのようなコードはPythonでネイティブに実行され、パフォーマンスを大幅に低下させます。
しかし、新しいOpenCV-Pythonインターフェースは、Numpyを完全にサポートしています。NumpyはPythonで科学計算を行うためのパッケージです。また、ネイティブCコードのラッパーでもあります。Numpy は高度に最適化されたライブラリで,様々な行列演算をサポートし,画像処理に非常に適しています.そのため,OpenCVの関数とNumpyの関数の両方を正しく組み合わせることができれば,非常に高速なコードを得ることができます.
覚えておくべきことは、Pythonでは常にループと反復を避けるようにすることです。その代わりに、Numpy(とOpenCV)で利用可能な配列操作の機能を使用します。単純に2つのnumpyの配列に
C = A+B
を使用して2つのnumpy配列を追加するだけで、2重ループを使用するよりも何倍も高速です。
例えば、以下のような記事を確認することができます。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] Pythonの@propertyデコレーターはどのように機能するのでしょうか?
-
[解決済み] Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] なぜPythonのコードは関数の中でより速く実行されるのですか?
-
[解決済み] OpenCV-Pythonによる簡単な数字認識OCR
-
[解決済み】OpenCVでPythonを使用して画像を切り抜く方法
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件