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