Making The Road Blog

http://makingx.net/blog/

mtr2.0
Making The Road はmakingのお勉強用サイトです.PHP, Javascriptを中心にいろいろ試してoutputしていきたい.
当サイトの訪問者は24時間以内にこんな単語↓で検索されています (マウスオーバーすると単語を含むqueryを表示します!)

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;
    }
}

結果はこんな感じ
cv.jpg
左上から元画像,グレースケール,二値化,平滑化(ガウシアン),左下Sobel,Laplacian,Canny,減色です.パラメータは超適当です.
これくらいは既存のGD,ImageMagickエクステンションで賄えそうですが,本格的にPHPで画像処理をやろうとやるつもりならこれを拡張していくのが良い?(ぼくはやるつもりないけど)

まだまだしょぼいのでつっこみ,感想等よろしくお願いします!
とりあえずファイルの落とすしか見れないのがイケてないので,ブラウザに直接出力できるようにしないと.

カテゴリー: OpenCV, Sakura, PECL, PHP, C | コメント( 0 ) | 2008/01/03 11:32:26 by making
ソーシャルブックマーク: add to hatena hatena.comment (1) add to del.icio.us (1) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 2
トラックバックURL:

Leave a Reply

求人