opencv インストール linux ubuntu

OpenCV2.0のインストール:Linux(Ubuntu) | OpenCV.jp <http://opencv.jp/opencv2-x-tips/install-linuxubuntu>

を参考にちょうど同じubuntu 10.04だったので、コマンドをコピペした。

$ sudo aptitude install libcv4 libhighgui4 libcvaux4 libcv-dev libhighgui-dev libcvaux-dev  opencv-doc

python-opencvは使わないので外した。 

最初は、なんでlibHighGUIが必要か分からなかったけど、Opencvの出力結果を簡単にGUIで見れるようになるから便利らしい。

OpenCV - HighGUI - Tech Note <http://rest-term.com/labs/misc/technote/index.php/OpenCV%20-%20HighGUI>

Opencv libraryの場所

	$ ls /usr/include/opencv/
	cv.h        cvconfig.h     cvwimage.h  cxmat.hpp         highgui.hpp
	cv.hpp      cvstreams.h    cxcore.h    cxmisc.h          ml.h
	cvaux.h     cvtypes.h      cxcore.hpp  cxoperations.hpp
	cvaux.hpp   cvver.h        cxerror.h   cxtypes.h
	cvcompat.h  cvvidsurv.hpp  cxflann.h   highgui.h

場所が分からなくて、synaptic パッケージマネージャーで「libcv」と探したら、プロパティーにpathが書いてあった。

まぁ

pkg-config --cflags --libs opencv

で一発なんですけどねー。

sample codeのコンパイル

エッジ検出(Sobel,Laplacian,Canny) | OpenCV.jp <http://opencv.jp/opencv2-x-samples/edge_detection>
を参考に、C++のコードをコンパイルした。

opencv-docを入れると/usr/share/doc/opencv-doc にsample用のMakefileがあるので、
それを書き換えて使う
  • edge.cpp
    	#include <cv.h>
    	#include <highgui.h>
    	 
    	using namespace cv;
    	 
    	int
    	main (int argc, char **argv)
    	{
    	  // (1)load a specified file as a grayscale image
    	  const char *imagename = argc > 1 ? argv[1] : "../image/bike_sign.png";
    	  Mat src_img = imread(imagename, 0);
    	  if(!src_img.data)
    	    return -1;
    	 
    	  // (2)calculate the first image derivatives using an Sobel operator
    	  Mat tmp_img;
    	  Mat sobel_img;
    	  Sobel(src_img, tmp_img, CV_32F, 1, 1);
    	  convertScaleAbs(tmp_img, sobel_img, 1, 0);
    	 
    	  // (3)calculate the Laplacian of an image 
    	  Mat laplacian_img;
    	  Laplacian(src_img, tmp_img, CV_32F, 3);
    	  convertScaleAbs(tmp_img, laplacian_img, 1, 0);
    	   
    	  // (4)implement the Canny algorithm for edge detection
    	  Mat canny_img;
    	  Canny(src_img, canny_img, 50, 200);
    	 
    	  // (5)show original gray and their edge images respectively,
    	  //    and quit when any key pressed
    	  namedWindow("Original(Grayscale)", CV_WINDOW_AUTOSIZE);
    	  namedWindow("Sobel", CV_WINDOW_AUTOSIZE);
    	  namedWindow("Laplacian", CV_WINDOW_AUTOSIZE);
    	  namedWindow("Canny", CV_WINDOW_AUTOSIZE);
    	  imshow("Original(Grayscale)", src_img);
    	  imshow("Sobel", sobel_img);
    	  imshow("Laplacian", laplacian_img);
    	  imshow("Canny", canny_img);
    	  waitKey(0);
    	 
    	  return 0;
    	}
  • Makefile
    	OBJECTS = edge
    
    	all: $(OBJECTS)
    
    	clean:
    		rm -f $(OBJECTS)
    
    
    	edge: edge.cpp
    		$(CXX) $^ -o $@ `pkg-config --cflags --libs opencv`

これで環境は整った!

顔検出用の学習済みfileの場所

/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml

にあった。これを顔認識用プログラムから読み込むようにする。

opencv.jp

のサイトのサンプルコードで必要だったので、探した。ほかにもいろいろな学習ファイルがある。

	haarcascade_eye.xml                   haarcascade_mcs_eyepair_small.xml
	haarcascade_eye_tree_eyeglasses.xml   haarcascade_mcs_lefteye.xml
	haarcascade_frontalface_alt.xml       haarcascade_mcs_mouth.xml
	haarcascade_frontalface_alt2.xml      haarcascade_mcs_nose.xml
	haarcascade_frontalface_alt_tree.xml  haarcascade_mcs_righteye.xml
	haarcascade_frontalface_default.xml   haarcascade_mcs_upperbody.xml
	haarcascade_fullbody.xml              haarcascade_profileface.xml
	haarcascade_lefteye_2splits.xml       haarcascade_righteye_2splits.xml
	haarcascade_lowerbody.xml             haarcascade_upperbody.xml
	haarcascade_mcs_eyepair_big.xml    

このコードは上で書いたようにインストールした環境で動いた。

	#include <cv.h>
	#include <highgui.h>
	int
	main (int argc, char **argv)
	{
	  int i;
	  IplImage *src_img = 0, *src_gray = 0;
	  const char *cascade_name = "haarcascade_frontalface_default.xml";
	  CvHaarClassifierCascade *cascade = 0;
	  CvMemStorage *storage = 0;
	  CvSeq *faces;
	  static CvScalar colors[] = {
	    {{0, 0, 255}}, {{0, 128, 255}},
	    {{0, 255, 255}}, {{0, 255, 0}},
	    {{255, 128, 0}}, {{255, 255, 0}},
	    {{255, 0, 0}}, {{255, 0, 255}}
	  };
	  // (1)画像を読み込む
	  if (argc < 2 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR)) == 0)
	    return -1;
	  src_gray = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 1);
	  // (2)ブーストされた分類器のカスケードを読み込む
	  cascade = (CvHaarClassifierCascade *) cvLoad (cascade_name, 0, 0, 0);
	  // (3)メモリを確保し,読み込んだ画像のグレースケール化,ヒストグラムの均一化を行う
	  storage = cvCreateMemStorage (0);
	  cvClearMemStorage (storage);
	  cvCvtColor (src_img, src_gray, CV_BGR2GRAY);
	  cvEqualizeHist (src_gray, src_gray);
	  // (4)物体(顔)検出
	  faces = cvHaarDetectObjects (src_gray, cascade, storage, 1.11, 4, 0, cvSize (40, 40));
	  // (5)検出された全ての顔位置に,円を描画する
	  for (i = 0; i < (faces ? faces->total : 0); i++) {
	    CvRect *r = (CvRect *) cvGetSeqElem (faces, i);
	    CvPoint center;
	    int radius;
	    center.x = cvRound (r->x + r->width * 0.5);
	    center.y = cvRound (r->y + r->height * 0.5);
	    radius = cvRound ((r->width + r->height) * 0.25);
	    cvCircle (src_img, center, radius, colors[i % 8], 3, 8, 0);
	  }
	  // (6)画像を表示,キーが押されたときに終了
	  cvNamedWindow ("Face Detection", CV_WINDOW_AUTOSIZE);
	  cvShowImage ("Face Detection", src_img);
	  cvWaitKey (0);
	  cvDestroyWindow ("Face Detection");
	  cvReleaseImage (&src_img);
	  cvReleaseImage (&src_gray);
	  cvReleaseMemStorage (&storage);
	  return 0;
	}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-05-12 (木) 21:37:48 (2906d)