コンピュータ イメージングの核心を使った仕事をしたいと思っています。データの単一ピクセルを読み取り、プログラムで分析し、変更する方法を探しています。これに使用するのに最適な言語は何ですか (Python、c++、Java...)? 最適なファイル形式は何ですか?
超豪華なソフトウェアや API は必要ありません... 必要最小限の機能を探しています。
コンピュータ イメージングの核心を使った仕事をしたいと思っています。データの単一ピクセルを読み取り、プログラムで分析し、変更する方法を探しています。これに使用するのに最適な言語は何ですか (Python、c++、Java...)? 最適なファイル形式は何ですか?
超豪華なソフトウェアや API は必要ありません... 必要最小限の機能を探しています。
速度が必要な場合 (おそらく常に画像処理の速度が必要になるでしょう)、生のピクセル データを使用する必要があります。Java には、メモリに直接アクセスできないため、メモリに直接アクセスする場合に比べてピクセル アクセスが非常に遅くなるため、いくつかの実際の欠点があります。C++ は、プロダクションで使用する画像処理に最適な言語であることは間違いありません。ただし、たとえば、特定の領域で安全でないコードを許可する C# を使用することもできます。(bitmapdata クラスの scan0 ポインター プロパティを見てください。) 私は C# を画像処理アプリケーションにうまく使用してきましたが、Java の対応するアプリケーションよりもはるかに高速です。そのような目的でスクリプト言語や Java を使用することはありません。
Pythonなどの高級言語を使用して画像であるピクセル情報の大規模な多次元または複雑な配列を操作することは非常に東です。PIL(Python Imaging Library )と呼ばれるライブラリがあります。これは非常に便利で、一般的なフィルターと変換(明るさの変更、柔らかくする、彩度を下げる、トリミングなど)を実行したり、生のピクセルデータを操作したりできます。
これは、私がこれまでに使用した中で最も簡単で単純な画像ライブラリであり、関心のあることを実行するように拡張できます(たとえば、ごくわずかなコードでのエッジ検出)。
私は人工知能とコンピューター ビジョンを研究していたので、この分野で使用されるツールの種類をよく知っています。
基本的には、舞台裏でどのように動作するかを知っている限り、好きなものを使用できます。
達成したいことに応じて、次のいずれかを使用できます。
解決策として選択された回答は非常に偏っており、この種の古風なコメントには注意する必要があります。
今日では、ハードウェアはウェットウェア (人間) よりも安価であるため、CPU サイクルやメモリ空間を数回犠牲にしても、結果をより速く生成できる言語を使用する必要があります。
また、多くの人は、ソフトウェアを C/C++ で実装している限り、スピードの聖杯を作っていると考える傾向がありますが、これは正しくありません。第一に、アルゴリズムの複雑さは、使用している言語よりもはるかに重要であるため (宇宙で最も遅い言語で実装されたとしても、悪いアルゴリズムがより良いアルゴリズムに勝ることは決してありません)、第二に、最近では高レベル言語が多くのことを行っているためです。これにより、C/C++ よりもさらに高速にプログラムを実行できます。
もちろん、上記のすべてを C/C++ でいつでも行うことができますが、車輪を再発明するためにどれだけの時間を無駄にできますか?
C / C ++が高速になるだけでなく、そこにある画像処理サンプルコードのほとんどがCにも含まれるため、見つけたものを簡単に組み込むことができます。
(これは、基本的なことだけを望んでいたOPには当てはまらないかもしれませんが、速度の問題が提起されたので、記録のためにこれを書く必要があります。)
本当に速度が必要な場合は、ピクセルごとのレベルでの作業を忘れて、実行する必要のある操作をベクトル化できるかどうかを確認することをお勧めします。たとえば、C / C ++コードには、優れたIntel IPPライブラリを使用できます(いいえ、私はIntelでは動作しません)。
画像の数値計算(マトリックスを考えてください)を探していて、Pythonに興味がある場合は、http://www.scipy.org/PyLabをチェックしてください。これは基本的にPythonでmatlabを実行する機能であり、私の仲間はそれを誓います。
簡単な答え: C++ と OpenCV
あなたが一番よく知っている言語は何語ですか? 私にとって、これは本当の質問です。ある特定の言語を何ヶ月もかけて学習する場合、Python や Java を (証明されるように) 開発速度だけで使用しても、実際の利点はありません。私は特に C++ に堪能で、この特定のタスクについては、たとえば Java プログラマーと同じくらい迅速に処理できると思います。いくつかの優れたライブラリ (OpenCV が頭に浮かびます) の助けを借りて、必要なものを数行の C++ コードで実際に作成できます。
それはあなたがしようとしていることによって少し異なります。
実行速度が問題になる場合は、C++ が最適です。
ただし、開発の速度が問題になる場合は、Java を検討することをお勧めします。あなたは、ピクセルの低レベル操作が必要だと言いましたが、これは Java が行います。しかし、問題になる可能性があるもう 1 つのことは、さまざまなファイル形式の処理です。Javaには、ファイルへのさまざまな画像フォーマットの読み取りと書き込みを処理するための非常に優れたAPIがいくつかあります(特にjava2dライブラリ。APIのより高いレベルを無視することを選択します)
c++ オプションを選択する場合 (または python を考える場合)、ライブラリを使用して、ファイルの読み取りと書き込みの起動時の問題を解決することを再度お勧めします。私は以前にlibgdで成功しました
簡潔な答え?C++ だと思います。生のメモリ チャンクを操作する際の柔軟性は、Python や Java よりもはるかに優れています。