Cv

 view release on metacpan or  search on metacpan

lib/Cv.pm  view on Meta::CPAN

	&Cv::CV_TYPE_NAME_HAAR       => 'Cv::HaarClassifierCascade',
	&Cv::CV_TYPE_NAME_IMAGE      => 'Cv::Image',
	&Cv::CV_TYPE_NAME_MAT        => 'Cv::Mat',
	&Cv::CV_TYPE_NAME_MATND      => 'Cv::MatND',
	&Cv::CV_TYPE_NAME_SEQ        => 'Cv::Seq',
	&Cv::CV_TYPE_NAME_SEQ_TREE   => 'Cv::Seq',
	&Cv::CV_TYPE_NAME_SPARSE_MAT => 'Cv::SparseMat',
	);

package Cv::FileStorage;
{ *new = \&Cv::OpenFileStorage }

sub fsbless {
	my ($ptr) = @_;
	if (my $class = $Cv::CLASS{Cv::cvTypeOf($ptr)->type_name}) {
		bless $ptr, $class;
	}
	$ptr;
}


sub Cv::Load {
	ref (my $class = shift) and Carp::croak 'class name needed';
	Cv::FileStorage->Load(@_)
}


sub Load {
	ref (my $class = shift) and Carp::croak 'class name needed';
	my $ref = fsbless Cv::cvLoad(@_);
	Carp::croak "type_name unknown in ", (caller 0)[3]
		unless Scalar::Util::blessed $ref;
	$ref;
}


sub Read {
	my $ref = fsbless cvRead(@_);
	Carp::croak "type_name unknown in ", (caller 0)[3]
		unless Scalar::Util::blessed $ref;
	$ref;
}


sub ReadByName {
	my ($fs, $map, $name) = splice(@_, 0, 3);
	Carp::croak "instance variable needed" unless ref $fs;
	$fs->Read($fs->getFileNodeByName($map, $name), @_);
}


sub Cv::TypeInfo::DESTROY {}
sub Cv::FileNode::DESTROY {}
sub Cv::String::DESTROY {}

# ============================================================
#  core. The Core Functionality: Clustering
# ============================================================

# ============================================================
#  core. The Core Functionality: Utility and System Functions and Macros
# ============================================================

package Cv;

=head2 Error Handling

C<Cv> is now possible to detect errors that occur in the block
protected as eval { ... }. (Cv-0.13)

 my $img = eval { Cv->createImage([-1, -1], 8, 3) };
 if ($@) {
    print STDERR "*** got error ***";
 }

=cut

our %ERROR = (
	handler => undef,
	handler_sample => sub {
		my ($status, $func_name, $err_msg, $file_name, $line) = @_;
		Carp::croak("$func_name: @{[ cvErrorStr($status) ]} ($err_msg)");
	},
	mode => 0,
	status => undef,
	userdata => undef,
	);

our $ERROR = sub {
	my ($status, $func_name, $err_msg, $file_name, $line) = @_;
	cvSetErrStatus($status);
	$func_name ||= 'unknown function';
	my $mode = $ERROR{mode};
	if ($mode == 0 || $mode == 1) {
		if (my $handler = $ERROR{handler}) {
			&{$handler}(
				 $status, $func_name, $err_msg, $file_name, $line,
				 $ERROR{userdata},
			);
		}
	}
	my $long = join(' ', "OpenCV Error:", cvErrorStr($status), "($err_msg)",
					"in $func_name");
	my $short = "$func_name: @{[cvErrorStr($status)]} ($err_msg)";
	Carp::croak $long if $mode == 0;
};

# CV_IMPL void cvError(int code, const char* func_name,
#  const char* err_msg, const char* file_name, int line)
sub cvError {
	goto &$ERROR;
}

# CvErrorCallback cvRedirectError(
#  CvErrorCallback error_handler, void* userdata=NULL, void** prevUserdata=NULL)
sub cvRedirectError {
	my $handler; ($handler, $_[2]) = ($ERROR{handler}, $ERROR{userdata});
	($ERROR{handler}, $ERROR{userdata}) = @_[0..1];
	$handler;
}



( run in 0.529 second using v1.01-cache-2.11-cpan-f56aa216473 )