名前

Cv::Seq - OpenCV のシーケンスを取り扱う。

概要

説明

OpenCV のシーケンスは、点、矩形、円など様々なデータを格納します。格納さ れたデータを型なしで扱うスーパクラス Cv::Seq と、データに 合わせた変換を行う派生クラス Cv::Seq::Point, Cv::Seq::Rect, ... に分け、データに合わせて bless して使います。C言語のキャストのようなものです。

facedetect の一部を示します。HaarDetectObjects() は、検出した顔を複数の CvRect 型のデータのリストにして返します。次の例は、シーケンスを Cv::Seq::Rect で bless して、顔を 1つずつ取り出します。

my $faces = bless $image->HaarDetectObjects(
  $cascade, $storage, 1.1, 2, CV_HAAR_SCALE_IMAGE,
  cvSize(30, 30)), "Cv::Seq::Rect";
while (my @rect = $faces->shift) {
  my ($x, $y, $w, $h) = @rect;
  ...
}

同じ部分の C言語のコードを並べておきます。比べやすくするために、余分な ものは省きました。

CvSeq* faces = cvHaarDetectObjects(
  image, cascade, storage, 1.1, 2, CV_HAAR_SCALE_IMAGE,
  cvSize(30, 30));
for (;;) {
  CvRect rect;
  cvSeqPopFront(faces, &rect);
  ...
}

メソッド

Cv->CreateSeq()
CreateSeq($seqFlags, $headerSize, $elemSize, $stor)
Cv::Seq->MakeSeqHeaderForArray($seqFlags, $headerSize, $elemSize, $stor)
Cv::Seq->new($seqFlags, $headerSize, $elemSize, $stor)
$seq->Push(@elem)
$seq->Pop()
$seq->Unshift(@elem)
$seq->Shift()
$seq->Splice()
# splice($array, $offset, $length, @list)
# splice($array, $offset, $length)
# splice($array, $offset)

バグ

参考

Cv::Nihongo, Cv::More

著作権

Yuta MASUDA <yuta.masuda@newdaysys.co.jp>

Copyright (c) 2012 by Yuta MASUDA.

All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.