Cv
view release on metacpan or search on metacpan
# ============================================================
MODULE = Cv PACKAGE = Cv
# ====================
CvHaarClassifierCascade*
cvLoadHaarClassifierCascade(const char* directory, CvSize orig_window_size)
MODULE = Cv PACKAGE = Cv::Arr
CvSeq*
cvHaarDetectObjects(const CvArr* image, CvHaarClassifierCascade* cascade, CvMemStorage* storage, double scaleFactor=1.1, int minNeighbors=3, int flags=0, CvSize minSize=cvSize(0,0), CvSize maxSize=cvSize(0,0))
CODE:
RETVAL = cvHaarDetectObjects(image, cascade, storage, scaleFactor, minNeighbors, flags, minSize
#if _CV_VERSION() >= _VERSION(2,2,0)
, maxSize
#endif
);
OUTPUT:
RETVAL
MODULE = Cv PACKAGE = Cv::HaarClassifierCascade
void
cvSetImagesForHaarClassifierCascade(CvHaarClassifierCascade* cascade, const CvArr* sum, const CvArr* sqsum, const CvArr* tilted_sum, double scale)
void
cvReleaseHaarClassifierCascade(CvHaarClassifierCascade* &cascade)
ALIAS: DESTROY = 1
INIT:
unbless(ST(0));
int
cvRunHaarClassifierCascade(CvHaarClassifierCascade* cascade, CvPoint pt, int start_stage=0)
# ============================================================
# video. Video Analysis: Motion Analysis and Object Tracking
# ============================================================
MODULE = Cv PACKAGE = Cv::Arr
# ====================
double
cvCalcGlobalOrientation(const CvArr* orientation, const CvArr* mask, const CvArr* mhi, double timestamp, double duration)
lib/Cv/JA.pod view on Meta::CPAN
OpenCV ã®ã·ã¼ã±ã³ã¹ã¯ãç¹ãç©å½¢ãåãªã©æ§ã
ãªãã¼ã¿ãæ ¼ç´ãã¾ããæ ¼ç´ã
ãããã¼ã¿ãåãªãã§æ±ãã¹ã¼ãã¯ã©ã¹ L<Cv::Seq> ã¨ããã¼ã¿ã«åãããå¤
æãè¡ãæ´¾çã¯ã©ã¹ C<Cv::Seq::Point>, C<Cv::Seq::Rect>, ... ã«åãããã¼
ã¿ã«åãã㦠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
sample/facedetect.pl view on Meta::CPAN
#!/usr/bin/perl
# -*- mode: perl; coding: utf-8; tab-width: 4; -*-
use strict;
use warnings;
use lib qw(blib/lib blib/arch);
use Cv;
use File::Basename;
my $haarDir = "/usr/local/share/OpenCV/haarcascades";
sub help {
die << "----";
This program demonstrates the haar cascade recognizer this classifier
can recognize many ~rigid objects, it\'s most known use is for faces.
Usage:
\$ .\/facedetect
[--cascade=<cascade_path>]
this is the primary trained classifier such as frontal face
[--nested-cascade[=<nested_cascade_path>]]
this an optional secondary classifier such as eyes
[--scale=<image scale greater or equal to 1, try 1.3 for example>]
[filename|camera_index]
see facedetect.cmd for one call:
\$ .\/facedetect
--cascade=$haarDir/haarcascade_frontalface_alt.xml
--nested-cascade=$haarDir/haarcascade_eye.xml
--scale=1.3
Hit any key to quit.
----
;
}
my $cascadeName = "$haarDir/haarcascade_frontalface_alt.xml";
my $nestedCascadeName = "$haarDir/haarcascade_eye_tree_eyeglasses.xml";
my $scale = 1;
use Getopt::Long;
unless (GetOptions(
"--cascade=s" => \$cascadeName,
"--nested-cascade=s" => \$nestedCascadeName,
"--scale=s" => \$scale,
)) {
help();
}
my $inputName = shift(@ARGV);
my $cascade = Cv->Load($cascadeName);
unless ($cascade) {
die "ERROR: Could not load classifier cascade";
}
my $nestedCascade = Cv->Load($nestedCascadeName);
unless ($nestedCascade) {
warn "WARNING: Could not load classifier cascade for nested objects\n";
}
my $capture;
my $image;
if (defined $inputName && $inputName =~ /^\d$/) {
$capture = Cv->captureFromCAM($inputName);
unless ($capture) {
warn "Capture from CAM $inputName didn't work\n";
}
} elsif ($inputName) {
sample/facedetect.pl view on Meta::CPAN
unless ($capture || $image) {
my $lena = dirname($0) . "/lena.jpg";
$image = Cv->loadImage($lena);
}
Cv->NamedWindow("result", 0);
if ($capture) {
while (my $frame = $capture->queryFrame) {
my $frameCopy = $frame->flip(\0, 1)->clone;
$frameCopy->detectAndDraw($cascade, $nestedCascade, $scale);
last if Cv->waitKey(10) > 0;
}
} elsif ($image) {
$image->detectAndDraw($cascade, $nestedCascade, $scale);
Cv->waitKey;
}
sub Cv::Arr::detectAndDraw {
my ($img, $cascade, $nestedCascade, $scale) = @_;
my @colors = (
CV_RGB( 0, 0, 255),
CV_RGB( 0, 128, 255),
CV_RGB( 0, 255, 255),
CV_RGB( 0, 255, 0),
CV_RGB(255, 128, 0),
CV_RGB(255, 255, 0),
CV_RGB(255, 0, 0),
CV_RGB(255, 0, 255)
);
sample/facedetect.pl view on Meta::CPAN
{ package Cv::Seq::FaceDetect;
our @ISA = qw(Cv::Seq::Point);
sub template {
my $self = CORE::shift;
my ($t, $c) = ("i5", 5);
wantarray? ($t, $c) : $t;
}
}
my $faces = bless $smallImg->HaarDetectObjects(
$cascade, $storage, 1.1, 2, 0
# |CV_HAAR_FIND_BIGGEST_OBJECT
# |CV_HAAR_DO_ROUGH_SEARCH
|CV_HAAR_SCALE_IMAGE
,
cvSize(30, 30)
), "Cv::Seq::FaceDetect";
$t = Cv->getTickCount() - $t;
printf("detection time = %g ms\n", $t/(Cv->getTickFrequency()*1000));
my $i = 0;
for my $face (@$faces) {
( run in 1.691 second using v1.01-cache-2.11-cpan-49f99fa48dc )