Image-Resize-OpenCV
view release on metacpan or search on metacpan
return ext ? ext+1 : NULL;
}
MODULE = Image::Resize::OpenCV PACKAGE = Image::Resize::OpenCV
IV _init(self, filename = NULL)
SV *self;
char *filename;
PREINIT:
IplImage *img, *gray;
AV *retval;
CODE:
if (!SvROK(self)) {XSRETURN_UNDEF;}
if (filename)
{
img = cvLoadImage(filename, CV_LOAD_IMAGE_UNCHANGED);
if (!img) croak("Can't load the image file `%s'", filename);
set_ptr(self, "_img", img);
}
RETVAL = 1;
OUTPUT:
RETVAL
IV load(self, filename)
SV *self;
char *filename;
PREINIT:
IplImage *img, *gray;
AV *retval;
CODE:
if (!SvROK(self)) {XSRETURN_UNDEF;}
img = (IplImage *) get_ptr(self, "_img");
if (img)
{
cvReleaseImage(&img);
img = NULL;
}
img = cvLoadImage(filename, CV_LOAD_IMAGE_UNCHANGED);
if (!img) croak("Can't load the image file `%s'", filename);
set_ptr(self, "_img", img);
RETVAL = 1;
OUTPUT:
RETVAL
void resize(self, width, height, ...)
SV *self;
int width;
int height;
PREINIT:
IplImage *img, *small_img;
int inter = 1;
int keep_aspect = 0;
PPCODE:
if (!SvROK(self)) {XSRETURN_UNDEF;}
if (items % 2 == 0)
{
croak("ERROR: resize - called with odd number of option parameters - should be of the form option => value");
}
int i;
for (i = 1; i < items; i+=2)
{
char *key = SvPV_nolen(ST(i));
IV value = SvIV(ST(i + 1));
if (strcasecmp(key, "inter") == 0)
{
inter = value;
}
else if (strcasecmp(key, "keep_aspect") == 0)
{
keep_aspect = value;
}
}
img = (IplImage *) get_ptr(self, "_img");
if (!img) croak("image not loaded!");
if (keep_aspect == 1)
{
double img_scale = 1;
if (abs(img->width - width) > abs(img->height - height))
img_scale = (double) img->width / (double) width;
else
img_scale = (double) img->height / (double) height;
small_img = cvCreateImage(cvSize(cvRound ((double) img->width / img_scale),
cvRound ((double) img->height / img_scale)), img->depth, img->nChannels );
}
else
{
small_img = cvCreateImage(cvSize(width, height), img->depth, img->nChannels );
}
cvResize(img, small_img, inter);
cvReleaseImage(&img);
set_ptr(self, "_img", small_img);
img = small_img;
EXTEND(SP, 2);
PUSHs(sv_2mortal(newSViv(img -> width)));
PUSHs(sv_2mortal(newSViv(img -> height)));
IV width(self)
SV *self;
PREINIT:
IplImage *img;
CODE:
( run in 1.370 second using v1.01-cache-2.11-cpan-71847e10f99 )