5

コンピュータ イメージングの核心を使った仕事をしたいと思っています。データの単一ピクセルを読み取り、プログラムで分析し、変更する方法を探しています。これに使用するのに最適な言語は何ですか (Python、c++、Java...)? 最適なファイル形式は何ですか?

超豪華なソフトウェアや API は必要ありません... 必要最小限の機能を探しています。

4

10 に答える 10

7

速度が必要な場合 (おそらく常に画像処理の速度が必要になるでしょう)、生のピクセル データを使用する必要があります。Java には、メモリに直接アクセスできないため、メモリに直接アクセスする場合に比べてピクセル アクセスが非常に遅くなるため、いくつかの実際の欠点があります。C++ は、プロダクションで使用する画像処理に最適な言語であることは間違いありません。ただし、たとえば、特定の領域で安全でないコードを許可する C# を使用することもできます。(bitmapdata クラスの scan0 ポインター プロパティを見てください。) 私は C# を画像処理アプリケーションにうまく使用してきましたが、Java の対応するアプリケーションよりもはるかに高速です。そのような目的でスクリプト言語や Java を使用することはありません。

于 2008-09-27T03:58:51.863 に答える
4

Pythonなどの高級言語を使用して画像であるピクセル情報の大規模な多次元または複雑な配列を操作することは非常に東です。PIL(Python Imaging Library )と呼ばれるライブラリがあります。これは非常に便利で、一般的なフィルターと変換(明るさの変更、柔らかくする、彩度を下げる、トリミングなど)を実行したり、生のピクセルデータを操作したりできます。

これは、私がこれまでに使用した中で最も簡単で単純な画像ライブラリであり、関心のあることを実行するように拡張できます(たとえば、ごくわずかなコードでのエッジ検出)。

于 2008-09-27T04:35:59.963 に答える
3

私は人工知能とコンピューター ビジョンを研究していたので、この分野で使用されるツールの種類をよく知っています。

基本的には、舞台裏でどのように動作するかを知っている限り、好きなものを使用できます。

達成したいことに応じて、次のいずれかを使用できます。

  • C言語ですが、アルゴリズムを実装するときにバグチェックとメモリ管理に多くの時間を費やすことになります. したがって、理論的には、これはその種の仕事を行うための最速の言語ですが、アルゴリズムが (複雑さの点で) 計算効率が悪い場合、またはバグ チェックに多くの時間を費やす場合、これは明らかに価値がありません。そのため、最初に別の言語でアプリケーションを実装することをお勧めします。その後、C バインディングを使用してコードの小さな部分をいつでも最適化できます。
  • Octave/MatLab: 非常に効率的な言語で、C とほぼ同じです。非常にエレガントで簡潔なアルゴリズムを作成できます。ベクトル化、行列、および線形演算に興味がある場合は、それを使用する必要があります。ただし、この言語でアプリケーション全体を開発することはできません。アルゴリズムに重点を置いていますが、後で別の言語を使用していつでもインターフェイスを開発できます。
  • Python: Google や Facebook などの非常に大規模なアプリケーションで使用される、オールインワンのエレガントでアクセスしやすい言語。Python を使用すると、あらゆる種類のアプリケーションで、ほとんどすべてのことを行うことができます。完全なアプリケーション (アルゴリズムだけでなく、クライアントとのやり取りなど) を作成したい場合、または既存のライブラリを使用してプロトタイプをすばやく作成したい場合、Python には次のような高品質のライブラリが非常に多数あるため、完全に適合します。OpenCV . ただし、アルゴリズムのみを作成する場合は、Octave/MatLab を使用することをお勧めします。

解決策として選択された回答は非常に偏っており、この種の古風なコメントには注意する必要があります。

今日では、ハードウェアはウェットウェア (人間) よりも安価であるため、CPU サイクルやメモリ空間を数回犠牲にしても、結果をより速く生成できる言語を使用する必要があります。

また、多くの人は、ソフトウェアを C/C++ で実装している限り、スピードの聖杯を作っていると考える傾向がありますが、これは正しくありません。第一に、アルゴリズムの複雑さは、使用している言語よりもはるかに重要であるため (宇宙で最も遅い言語で実装されたとしても、悪いアルゴリズムがより良いアルゴリズムに勝ることは決してありません)、第二に、最近では高レベル言語が多くのことを行っているためです。これにより、C/C++ よりもさらに高速にプログラムを実行できます。

もちろん、上記のすべてを C/C++ でいつでも行うことができますが、車輪を再発明するためにどれだけの時間を無駄にできますか?

于 2012-10-29T16:11:07.987 に答える
2

C / C ++が高速になるだけでなく、そこにある画像処理サンプルコードのほとんどがCにも含まれるため、見つけたものを簡単に組み込むことができます。

于 2008-09-27T04:03:52.040 に答える
1

(これは、基本的なことだけを望んでいたOPには当てはまらないかもしれませんが、速度の問題が提起されたので、記録のためにこれを書く必要があります。)

本当に速度が必要な場合は、ピクセルごとのレベルでの作業を忘れて、実行する必要のある操作をベクトル化できるかどうかを確認することをお勧めします。たとえば、C / C ++コードには、優れたIntel IPPライブラリを使用できます(いいえ、私はIntelでは動作しません)。

于 2008-09-27T04:13:15.153 に答える
1

画像の数値計算(マトリックスを考えてください)を探していて、Pythonに興味がある場合は、http://www.scipy.org/PyLabをチェックしてください。これは基本的にPythonでmatlabを実行する機能であり、私の仲間はそれを誓います。

于 2008-09-27T04:14:59.750 に答える
1

簡単な答え: C++ と OpenCV

于 2010-09-22T19:16:12.363 に答える
1

あなたが一番よく知っている言語は何語ですか? 私にとって、これは本当の質問です。ある特定の言語を何ヶ月もかけて学習する場合、Python や Java を (証明されるように) 開発速度だけで使用しても、実際の利点はありません。私は特に C++ に堪能で、この特定のタスクについては、たとえば Java プログラマーと同じくらい迅速に処理できると思います。いくつかの優れたライブラリ (OpenCV が頭に浮かびます) の助けを借りて、必要なものを数行の C++ コードで実際に作成できます。

于 2008-11-09T00:26:28.920 に答える
1

それはあなたがしようとしていることによって少し異なります。

実行速度が問題になる場合は、C++ が最適です。

ただし、開発の速度が問題になる場合は、Java を検討することをお勧めします。あなたは、ピクセルの低レベル操作が必要だと言いましたが、これは Java が行います。しかし、問題になる可能性があるもう 1 つのことは、さまざまなファイル形式の処理です。Javaには、ファイルへのさまざまな画像フォーマットの読み取りと書き込みを処理するための非常に優れたAPIがいくつかあります(特にjava2dライブラリ。APIのより高いレベルを無視することを選択します)

c++ オプションを選択する場合 (または python を考える場合)、ライブラリを使用して、ファイルの読み取りと書き込みの起動時の問題を解決することを再度お勧めします。私は以前にlibgdで成功しました

于 2008-09-27T04:44:42.127 に答える
0

簡潔な答え?C++ だと思います。生のメモリ チャンクを操作する際の柔軟性は、Python や Java よりもはるかに優れています。

于 2008-09-27T03:51:24.050 に答える