phpでOpenCV
PHPでOpenCVのAPIが使えるようにエクステンション書いてみました.
とりあえず超基本的なやつだけ.
さくらでのOpenCvのインストールはこちら.さくら以外でコンパイルできるかわかりません..さくらの環境もかなりいじっているのでさくらでもできるかわかりませんw
php_opencv-0.0.1.tar.gz
PHP5をインストールしていてCodeGen_PECLでつくりました.opencv.xmlも公開しときます.ライセンスをどうしたらいいのか分りませんw
一応,ぼくの環境でコンパイルしたバイナリはこちら.FreeBSD 6.1です.
インストール方法は
wget http://makingx.net/distribute/php_opencv-0.0.1.tar.gz tar xzvf php_opencv-0.0.1.tar.gz cd opencv phpize ./configure make make install echo "extension=opencv.so" >> ~/www/php.ini
使い方は
< ?php if(!extension_loaded('opencv')) dl('opencv.so'); $source_file = 'lena.jpg'; $img = array(); $img[] = cvLoadImage($source_file, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if (!$img[0]) die('no such image [' . $source_file . "]!\n"); $img[] = cvCreateImage(cvGetWidth($img[0]), cvGetHeight($img[0]), IPL_DEPTH_8U, 1); $img[] = cvCloneImage($img[1]); $img[] = cvCloneImage($img[0]); $img[] = cvCloneImage($img[1]); $img[] = cvCreateImage(cvGetWidth($img[0]), cvGetHeight($img[0]), IPL_DEPTH_16S, 1); $img[] = cvCloneImage($img[1]); $img[] = cvCloneImage($img[1]); $img[] = cvCloneImage($img[0]); cvCvtColor($img[0], $img[1], CV_BGR2GRAY); cvThreshold($img[1], $img[2], 128, 255, CV_THRESH_BINARY); cvSmooth($img[0], $img[3], CV_GAUSSIAN, 7, 0, 0); cvSobel($img[1], $img[4], 1, 0, 3); cvLaplace($img[1], $img[5], 3); cvConvertScaleAbs($img[5], $img[6], 1, 0); cvCanny($img[1], $img[7], 120, 180, 3); cvSetData($img[8], array_map('test', cvGetData($img[8]))); for ($i = 1, $l = count($img); $i < $l; $i++) { if (cvGetDepth($img[$i]) == 8) cvSaveImage('output' . $i . '.jpg', $img[$i]); cvReleaseImage($img[$i]); } function test($x) { if ($x < 100) { return 0; } else if ($x < 200) { return 100; } else { return 200; } }
結果はこんな感じ

左上から元画像,グレースケール,二値化,平滑化(ガウシアン),左下Sobel,Laplacian,Canny,減色です.パラメータは超適当です.
これくらいは既存のGD,ImageMagickエクステンションで賄えそうですが,本格的にPHPで画像処理をやろうとやるつもりならこれを拡張していくのが良い?(ぼくはやるつもりないけど)
まだまだしょぼいのでつっこみ,感想等よろしくお願いします!
とりあえずファイルの落とすしか見れないのがイケてないので,ブラウザに直接出力できるようにしないと.








