ラベル OpenCV の投稿を表示しています。 すべての投稿を表示
ラベル OpenCV の投稿を表示しています。 すべての投稿を表示

2013年11月5日火曜日

Ubuntu 13.10 にOpenCV 2.4.5 を apt-get でインストールするとエラーが起こることがある

問題点


Ubuntu 13.10 では,次のようなコマンドで OpenCV 2.4.5 がインストールできる.

sudo apt-get install libopencv-dev

しかし,nVidia のグラフィックボード以外を使っている場合は注意が必要だ.上記のコマンドでそのままインストールすると,次回ログインに失敗してしまうのだ.

原因は,libopencv-dev が依存する libopencv-ocl が PCのグラフィックボードがなんだろうと ndivia が実装している OpenCL ライブラリ(とドライバ)をインストールしてしまうというバグがあるからだ.そのため,nVidia ドライバの読み込みに失敗してログインできなくなる.(正確には,Xの立ち上げに失敗する).

解決法


libopencv-ocl 自体はどの OpenCL ライブラリでもOKなので,ジェネラルな OpenCL実装をインストールしてから,OpenCVをインストールすればよい.

sudo apt-get install ocl-icd-libopencl1
sudo apt-get install libopencv-dev

もし,すでにクラッシュしていたら,次のようにしてみるといいかもしれない.(未確認)

「Alt」+「F2」を押して,tty を表示,ユーザー名とパスワードを入れてログイン.

sudo apt-get install ocl-icd-opencl1
sudo apt-get remove nvidia-319-updates  nvidia-settings-319-updates
または,
sudo apt-get autoremove

2013年6月2日日曜日

OpenCV で16bitのカラー画像の画素値を取得・設定する(C言語)

8ビットカラー画像の画素値へのアクセスは公式マニュアルのとおり, IplImage->imageData で直接アクセスできる.また,グレースケール画像の場合は,ビット数や型に関係なく,cvGetReal2D 関数で取得できる.

では,16ビットカラー画像で画素ごとにアクセスするにはどうしたらいいのか.その取得方法や設定方法を紹介する.方法としては,CvScalar型を経由し,Get*D,Set*D関数を使うのが簡単である.CvScalar型は,double val[4] のみを持つ構造体で,各色の輝度値を格納している.以下がサンプルコードである.なお,この方法は16ビットだけでなく他の型の画像でも適用可能である.

画素値の取得


IplImage* img; // img は16ビットカラー画像とする

CvScalar pixel = cvGet2D(img, y, x);
double b = pixel.val[0];
double g = pixel.val[1];
double r = pixel.val[2];

画素値の設定


CvScalar pixel = cvScalar(b, g, r, 0);
cvSet2D(img, y, x, pixel);