# -*- mode: pod; coding: utf-8; tab-width: 4; -*-
=encoding utf8

=head1 名前

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

=head1 概要

=head1 説明

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

facedetect の一部を示します。HaarDetectObjects() は、検出した顔を複数の
CvRect 型のデータのリストにして返します。次の例は、シーケンスを
C<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);
    ...
  }

=head2 メソッド

=over

=item Cv->CreateSeq()

=item CreateSeq($seqFlags, $headerSize, $elemSize, $stor)

=item Cv::Seq->MakeSeqHeaderForArray($seqFlags, $headerSize, $elemSize, $stor)

=item Cv::Seq->new($seqFlags, $headerSize, $elemSize, $stor)

=item $seq->Push(@elem)

=item $seq->Pop()

=item $seq->Unshift(@elem)

=item $seq->Shift()

=item $seq->Splice()

	# splice($array, $offset, $length, @list)
	# splice($array, $offset, $length)
	# splice($array, $offset)

=back

=head1 バグ

=head1 参考

L<Cv::Nihongo|Cv::Nihongo>,
L<Cv::More|Cv::More-ja>

=head1 著作権

Yuta MASUDA E<lt>yuta.masuda@newdaysys.co.jpE<gt>

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.

=cut
