OpenCVは必要か
-
タンタ
OpenCVは必要か
画像処理について
VC++2010の環境はあるんですがOpenCVは今入ってない状態です。
OpenCVを使わずにVC++だけで画像処理のプログラムは作れますか?RGBや輝度を変化させたり
jpegの画像をアフィン変換したり、するプログラムが作りたいです。OpenCVは入れたほうが良いでしょうか?
VC++2010の環境はあるんですがOpenCVは今入ってない状態です。
OpenCVを使わずにVC++だけで画像処理のプログラムは作れますか?RGBや輝度を変化させたり
jpegの画像をアフィン変換したり、するプログラムが作りたいです。OpenCVは入れたほうが良いでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: OpenCVは必要か
OpenCVは楽する為に入れるので、自力で作れるなら別に入れる必要は無いでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: OpenCVは必要か
関数が既にあるので呼び出すだけです。たんた さんが書きました:どれくらい楽になるんでしょうか?
VC++2010と言うかWindowsAPIではRGBの入ったメモリポインタを得られるので自分でRGBに分解する必要が有るレベルって言ったら分かりますかね?たんた さんが書きました:輝度やRGB値を取得する関数ってVC++2010にデフォルトで備わってありますか?
【補足】
名前の統一をお願いしていおりますので、どちらかに固定してください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: OpenCVは必要か
Windows APIで画素に直接アクセスするにはDIBを理解する必要があるような。
表示することを考えないなら画像ファイルから直接メモリに読み込んでイジれば良いと思いますけど、その場合でもファイルフォーマットに関する知識が必要ですね。
jpegを読み書きするだけならOpenCV以外にも著名なライブラリがありますけど。
表示することを考えないなら画像ファイルから直接メモリに読み込んでイジれば良いと思いますけど、その場合でもファイルフォーマットに関する知識が必要ですね。
jpegを読み書きするだけならOpenCV以外にも著名なライブラリがありますけど。
-
usao
Re: OpenCVは必要か
なにを(どのレベルを?)やりたいのか,によるのではないでしょうか.
処理結果が得られればよい → 例に挙げられた程度の処理ならOpenCVなら関数呼び出しくらいでOK
アフィン変換等のアルゴリズム自体の実装をやりたい → 画像の読込とかだけにOpenCVを使うのでもかなり楽
画像読込とかからすべてやりたい → 完全自前
#仮に,既存の自前画像処理コード等がいくらかある状態で導入を迷っているのだとしても
普通(? BGR 8bit 3ch)の画像であれば,OpenCVのIplImageの画像データ部はWindowsのBitmapのそれと
同じフォーマットになるので,それほど困らないと思います.
処理結果が得られればよい → 例に挙げられた程度の処理ならOpenCVなら関数呼び出しくらいでOK
アフィン変換等のアルゴリズム自体の実装をやりたい → 画像の読込とかだけにOpenCVを使うのでもかなり楽
画像読込とかからすべてやりたい → 完全自前
#仮に,既存の自前画像処理コード等がいくらかある状態で導入を迷っているのだとしても
普通(? BGR 8bit 3ch)の画像であれば,OpenCVのIplImageの画像データ部はWindowsのBitmapのそれと
同じフォーマットになるので,それほど困らないと思います.
-
たんた
Re: OpenCVは必要か
ありがとうございます。OpenCVはやっぱり入れた方がいいですね。
ところで「何ができるか」という事についてもう少し深く見ていきたいのですが
OpenCVはかなり便利な機能を備えていますよね?
目的物体を輪郭で囲って追跡したりとか。
そういう画像処理として画期的な事ができ、それ以上凄い事ができるのか?
という疑問が湧きます。実際どうですか?OpenCVは開発環境ですが開発する事って
あるのかな?って思います。どう思いますか?
ところで「何ができるか」という事についてもう少し深く見ていきたいのですが
OpenCVはかなり便利な機能を備えていますよね?
目的物体を輪郭で囲って追跡したりとか。
そういう画像処理として画期的な事ができ、それ以上凄い事ができるのか?
という疑問が湧きます。実際どうですか?OpenCVは開発環境ですが開発する事って
あるのかな?って思います。どう思いますか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: OpenCVは必要か
私たちの出来ることは助言であって、決めるのはたんたさんです。
>実際どうですか?OpenCVは開発環境ですが開発する事ってあるのかな?って思います。どう思いますか?
私は使っていません。ここの管理人さんである Dixq (管理人)さんは使ってますね。
つまり、その人次第です。
必要なら入れるべきでしょうとしか言えないです。
【追記】
>それ以上凄い事ができるのか?
何が凄いかは、使う人の主観に左右されます。
あと、すごい事をするのはライブラリではなくアプリケーションの役割だと思うのですが如何でしょうか?
ぜひ、リファレンスを見て判断なさってください。
「OpenCV 2.2 C リファレンス — opencv 2.2 documentation」
http://opencv.jp/opencv-2svn/c/
>実際どうですか?OpenCVは開発環境ですが開発する事ってあるのかな?って思います。どう思いますか?
私は使っていません。ここの管理人さんである Dixq (管理人)さんは使ってますね。
つまり、その人次第です。
必要なら入れるべきでしょうとしか言えないです。
【追記】
>それ以上凄い事ができるのか?
何が凄いかは、使う人の主観に左右されます。
あと、すごい事をするのはライブラリではなくアプリケーションの役割だと思うのですが如何でしょうか?
ぜひ、リファレンスを見て判断なさってください。
「OpenCV 2.2 C リファレンス — opencv 2.2 documentation」
http://opencv.jp/opencv-2svn/c/
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: OpenCVは必要か
OpenCVはアプリケーションではなくてライブラリです。単体で使うことはできません。
OpenCVは高レベルの便利な画像処理関数も用意されていますが、
低レベルの処理を組み合わせることで応用的な処理をすることもできます。
OpenCVは高レベルの便利な画像処理関数も用意されていますが、
低レベルの処理を組み合わせることで応用的な処理をすることもできます。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: OpenCVは必要か
名前は平仮名or片仮名で統一をお願いしたはずですので、どちらかでお願いします。
どちらにすると明言してもらえば、今までの分も修正します。
画像処理自体が目的の場合もあるでしょうが、大抵は別の目的が有りそのための手段を提供してくれる物だと思います。
たんたさん目的が画像加工を試すことであれば、OpenCVは完成されていると思いますので色々試せると思います。
もし、画像加工のライブラリを作ることであれば、OpenCVは参考になると思います。
画像処理を使ったアプリケーションを作るのであれば、OpenCVは便利な機能を提供してくれるライブラリだと思います。
と言う事で、たんたさんの目的が明確で無い以上は私が言えるのはこれだけで何に悩んでいるかよく分からないのです。
なので最初の質問にもう一度応えるとしたら
> OpenCVを使わずにVC++だけで画像処理のプログラムは作れますか?RGBや輝度を変化させたり
> jpegの画像をアフィン変換したり、するプログラムが作りたいです。
もちろんOpenCVなしに作れます。
画像処理のライブラリを自分で作ることが目的であれば自分で作るべきだと思います。
>OpenCVは入れたほうが良いでしょうか?
画像処理のライブラリを自分で作ることが目的でないなら入れたほうが良いと思います。
どちらにすると明言してもらえば、今までの分も修正します。
OpenCVはあくまで画像処理アプリケーションのためのライブラリですよね。タンタ さんが書きました:OpenCVがもう完成されたアプリケーションじゃないですか?
便利すぎてこれ以上応用しようがないと思うんですが。
画像処理自体が目的の場合もあるでしょうが、大抵は別の目的が有りそのための手段を提供してくれる物だと思います。
たんたさん目的が画像加工を試すことであれば、OpenCVは完成されていると思いますので色々試せると思います。
もし、画像加工のライブラリを作ることであれば、OpenCVは参考になると思います。
画像処理を使ったアプリケーションを作るのであれば、OpenCVは便利な機能を提供してくれるライブラリだと思います。
と言う事で、たんたさんの目的が明確で無い以上は私が言えるのはこれだけで何に悩んでいるかよく分からないのです。
なので最初の質問にもう一度応えるとしたら
> OpenCVを使わずにVC++だけで画像処理のプログラムは作れますか?RGBや輝度を変化させたり
> jpegの画像をアフィン変換したり、するプログラムが作りたいです。
もちろんOpenCVなしに作れます。
画像処理のライブラリを自分で作ることが目的であれば自分で作るべきだと思います。
>OpenCVは入れたほうが良いでしょうか?
画像処理のライブラリを自分で作ることが目的でないなら入れたほうが良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
usao
Re: OpenCVは必要か
日常的にOpenCVを使ってますが,これをつかって楽なのは,
先に挙げたように,画像のロード(bmp,jpg,png等を同じ関数にファイル名だけ指定すれば読んでくれる)みたいなことの他に,
「画像処理入門」みたいな本とかに書かれているような基本的な処理,たとえば,
・2値化
・エッジ検出
・アフィン変換,平面射影変換
・画像同士の演算(加算とか)みたいなの
…等の実装が用意されていて,わざわざ一からコーディングする手間が省けることです.
やりたいことがこの程度の事柄,あるいはその組み合わせで達成できるのであれば,「OpenCVを使えば終了」と言えます.
#ただし,(当然ながら)必要なものすべてがそろっているわけではありません.(例えば,ラベリング処理は何故か無い)
より高度な(?)処理の実装もありますが,高度(複雑)であればあるほど,
自分がやりたいこととの差を埋めにくくなります.
(だいたいやりたいことと似てるんだけど,この部分だけをこうしてほしいのに…という要求には答えられない)
本当にそのまま使えるものがたまたま存在した!のでなければ,
目的の処理プログラムを作るのは自分です.すべてが解決するわけではありません.
個人的には使った方が格段に楽だと思いますが,一応導入のデメリットも無いわけではありません
・導入自体に関わることがら
・下手するとOpenCVのビルドを自分でやるとかいう手間
・ライブラリのライセンスがどうのという事柄,等
・OpenCVの使いかた自体の勉強が必要
・C++インタフェースは難解.
・C言語のインタフェースは独特の癖がある.特に動的に確保されるデータの形式とか.
・知ってる人が(C+WindowsAPIみたいな状態と比べて)少なくなるので,何か困ったことがあったときに
ネット検索とか,こういった場での質問とかで,答えを見つけられる率が減るかもしれない.
…とか.
先に挙げたように,画像のロード(bmp,jpg,png等を同じ関数にファイル名だけ指定すれば読んでくれる)みたいなことの他に,
「画像処理入門」みたいな本とかに書かれているような基本的な処理,たとえば,
・2値化
・エッジ検出
・アフィン変換,平面射影変換
・画像同士の演算(加算とか)みたいなの
…等の実装が用意されていて,わざわざ一からコーディングする手間が省けることです.
やりたいことがこの程度の事柄,あるいはその組み合わせで達成できるのであれば,「OpenCVを使えば終了」と言えます.
#ただし,(当然ながら)必要なものすべてがそろっているわけではありません.(例えば,ラベリング処理は何故か無い)
より高度な(?)処理の実装もありますが,高度(複雑)であればあるほど,
自分がやりたいこととの差を埋めにくくなります.
(だいたいやりたいことと似てるんだけど,この部分だけをこうしてほしいのに…という要求には答えられない)
本当にそのまま使えるものがたまたま存在した!のでなければ,
目的の処理プログラムを作るのは自分です.すべてが解決するわけではありません.
個人的には使った方が格段に楽だと思いますが,一応導入のデメリットも無いわけではありません
・導入自体に関わることがら
・下手するとOpenCVのビルドを自分でやるとかいう手間
・ライブラリのライセンスがどうのという事柄,等
・OpenCVの使いかた自体の勉強が必要
・C++インタフェースは難解.
・C言語のインタフェースは独特の癖がある.特に動的に確保されるデータの形式とか.
・知ってる人が(C+WindowsAPIみたいな状態と比べて)少なくなるので,何か困ったことがあったときに
ネット検索とか,こういった場での質問とかで,答えを見つけられる率が減るかもしれない.
…とか.
-
usao
Re: OpenCVは必要か
>すべてが解決するわけではありません.
の例として… (話の内容は,わけわかんないかもしれませんが)
カメラで撮影した画像をどうのこうのするアプリケーションを作ろうという場合,しばしば
「カメラキャリブレーション」ということをやる必要がある場合があります.
これの実装はかなーり面倒です(それなりに数学的ですし).
しかし!
OpenCVにはカメラキャリブレーションの関数として,Zhangの手法(わりと有名なカメラキャリブレーション手法)の実装が提供されています.
やったね!これを使えば楽ができそうです.
ところが,この関数を使うには,
カメラで何らかのパターンを撮影した画像から,パターンの写っている位置を認識して,
その認識結果座標群データを,引数として与える必要があります.どうしましょう…パターン認識とか……
(まぁ最悪手作業で座標値を全部指定してもいいけど,何十枚もの撮影画像が必要なので日が暮れるどころではない)
が,親切なことに,
OpenCVでは,チェスボードパターンを撮影した画像から,コーナー点群を認識する関数 というのも用意されている!
なので,これを使えばよさそうです.
よって,OpenCVの関数を使ってカメラキャリブレーションなる処理を達成しようとすると,
(1)コーナー点を認識する関数で,座標群データを得る
(2) (1)の結果をキャリブレーション処理関数に与える
という流れにすればよさそうです!
実際,ごくふつうのカメラを用いる場合には,このシナリオは大抵うまくいきます.
しかしながら,(1)の認識処理を行う関数の性能はどうにも甘く,
例えば,歪が大きいカメラ(広角カメラとか魚眼カメラとか)を使いたい場合だと,その歪んだ画像からパターンをうまく認識してくれないのです.
「もうちょっと頑張ってくれればいいのに!」
…でも,その”もうちょっと”を何とかしてくれるような機能は用意されていません.
この場合,(1)の部分は自前で用意しなければなりません.
(それでも,(2)の関数はそのまま使えるのであれば,労力は全部自分で実装するのに比べると減ります)
の例として… (話の内容は,わけわかんないかもしれませんが)
カメラで撮影した画像をどうのこうのするアプリケーションを作ろうという場合,しばしば
「カメラキャリブレーション」ということをやる必要がある場合があります.
これの実装はかなーり面倒です(それなりに数学的ですし).
しかし!
OpenCVにはカメラキャリブレーションの関数として,Zhangの手法(わりと有名なカメラキャリブレーション手法)の実装が提供されています.
やったね!これを使えば楽ができそうです.
ところが,この関数を使うには,
カメラで何らかのパターンを撮影した画像から,パターンの写っている位置を認識して,
その認識結果座標群データを,引数として与える必要があります.どうしましょう…パターン認識とか……
(まぁ最悪手作業で座標値を全部指定してもいいけど,何十枚もの撮影画像が必要なので日が暮れるどころではない)
が,親切なことに,
OpenCVでは,チェスボードパターンを撮影した画像から,コーナー点群を認識する関数 というのも用意されている!
なので,これを使えばよさそうです.
よって,OpenCVの関数を使ってカメラキャリブレーションなる処理を達成しようとすると,
(1)コーナー点を認識する関数で,座標群データを得る
(2) (1)の結果をキャリブレーション処理関数に与える
という流れにすればよさそうです!
実際,ごくふつうのカメラを用いる場合には,このシナリオは大抵うまくいきます.
しかしながら,(1)の認識処理を行う関数の性能はどうにも甘く,
例えば,歪が大きいカメラ(広角カメラとか魚眼カメラとか)を使いたい場合だと,その歪んだ画像からパターンをうまく認識してくれないのです.
「もうちょっと頑張ってくれればいいのに!」
…でも,その”もうちょっと”を何とかしてくれるような機能は用意されていません.
この場合,(1)の部分は自前で用意しなければなりません.
(それでも,(2)の関数はそのまま使えるのであれば,労力は全部自分で実装するのに比べると減ります)