Hatena::ブログ(Diary)

muddy brown thang このページをアンテナに追加 RSSフィード Twitter

2007-09-24

OpenCV-PHP拡張モジュールのアップデートのお知らせ

『OpenCV の PHP バインディングを書いてみた』から早 6 ヶ月も経過、すっかり本人が存在を忘れていた OpenCV-PHP バインディング。最近この日記のコメント欄で (おそらく) 海外のクレクレ君から「Windows 版の DLL くれ!俺はテンパってるんだ!」と言われて意外に有用かもしれないと思ったのと、つい先日『OpenCV プログラミングブック』が発売されたのもあってちょっと更新してみた。

OpenCV プログラミングブック

OpenCV プログラミングブック

更新された箇所は以下

  • TSRM ビルドの修正 (Thanks to 某クレクレ君)
  • cv_rect_seq_* 系の関数を廃止し、代わりに汎用的な cv_seq_* 系の API を提供。
  • ちょっとしたメモリリークの修正
  • シーケンス型の属性にアクセスできる cv_seq_attr_get() の追加
  • 輪郭抽出関数 (cv_array_find_contours()) の追加。

cv_array_find_contours() のサンプルコード

<?php
// 画像の読み込み
$im = cv_image_load('test.jpg');
// グレースケールの画像を生成
$im_sz = cv_array_get_size($im);
$gray_im = cv_image_create($im_sz[0], $im_sz[1], IPL_DEPTH_8U, 1);
cv_array_convert_color($im, CV_BGR, $gray_im, CV_GRAY);
// 2 値化
$tmp_img = cv_image_create_same($gray_im);
cv_array_threshold($gray_im, $tmp_img, 192, 255, CV_THRESH_BINARY);

// 輪郭を描画
$im = ImageCreateFromJpeg('test.jpg');
$orange = ImageColorAllocate($im, 255, 192, 0);
$blue = ImageColorAllocate($im, 0, 0, 255);
foreach (cv_array_find_contours($tmp_img) as $contour) {
    // rect 属性は多角形を含む最小の矩形を指定する
    $rect = cv_seq_attr_get($contour, "rect");
    ImageRectangle($im,
        $rect['x'],
        $rect['y'],
        $rect['x'] + $rect['w'],
        $rect['y'] + $rect['h'],
        $orange);
    // ImagePolygon で描画できるようにデータ構造を変換
    $points = array();
    for ($i = 0; $i < cv_seq_count($contour); $i++) {
        $point = cv_seq_get($contour, $i);
        $points[] = $point['x'];
        $points[] = $point['y'];
    }
    ImagePolygon($im, $points, $i, $blue);
}
ImageJpeg($im, 'out.jpg');
?>

ダウンロード

http://www.voltex.jp/downloads/opencv-php-0.0RC1.tar.gz

useruser 2007/10/11 10:51 こんなエラーが出てうまくいかないんです。
回避方法教えてください
PHP Warning: PHP Startup: Unable to load dynamic library ’/usr/lib64/php/modules/opencv.so’ - /usr/lib64/php/modules/opencv.so: undefined symbol: ZEND_NUW_ARGS in Unknown on line 0
PHP Warning: Unknown: Unable to load dynamic library ’/usr/lib64/php/modules/opencv.so’ - /usr/lib64/php/modules/opencv.so: undefined symbol: ZEND_NUW_ARGS in Unknown on line 0

moriyoshimoriyoshi 2007/10/12 11:26 おっと、typo ですね。報告ありがとうございます。
opencv.c の ZEND_NUW_ARGS となっている箇所を ZEND_NUM_ARGS に変えて試してみてください。

user2user2 2008/04/10 17:18 こんなエラーがでます。
教えてください。
PHP Warning: PHP Startup: Unable to load dynamic library ’/usr/lib/php/modules/opencv.so’ - /usr/lib/php/modules/opencv.so: undefined symbol: RETURN_DVAL in Unknown on line 0

moriyoshimoriyoshi 2008/04/10 19:13 それも typo です。RETURN_DVAL を RETURN_DOUBLE にすれば動くと思います。ごめんなさい。
そのうち直しておきます。

user3user3 2008/07/01 16:13 vi /root/opencv-php-0.0RC1/opencv.c
vi /root/opencv-php-0.0RC1/face_detect-0.0.1/opencv-php-0.0RC1/opencv.c
vi /root/opencv-php-0.0RC1/face_detect-0.0.1/opencv-php-0.0RC1/opencv-1.0.0/opencv-php-0.0RC1/opencv.c
vi /root/opencv-php-0.0RC1/face_detect-0.0.1/opencv-php-0.0RC1/opencv-1.0.0/opencv-php-0.0RC1/opencv-php-0.0RC1/opencv.c
vi /root/face_detect-0.0.1/opencv-php-0.0RC1/opencv.c

全ての箇所を『ZEND_NUW_ARGS』→『ZEND_NUM_ARGS』にしましたが、

PHP Warning: PHP Startup: Unable to load dynamic library ’/usr/lib/php/modules/opencv.so’ - /usr/lib/php/modules/opencv.so: undefined symbol: ZEND_NUW_ARGS in Unknown on line 0
PHP Fatal error: Call to undefined function cv_image_load() in /home/test.php on line 3

Fatal error: Call to undefined function cv_image_load() in /home/test.php on line 3

の様なエラーが出ます。

トラックバック - http://d.hatena.ne.jp/moriyoshi/20070924/1190595577