fix a memleak in vips__correl
and some more tests
This commit is contained in:
parent
6782769d8c
commit
679665b403
@ -97,7 +97,7 @@ vips__correl( VipsImage *ref, VipsImage *sec,
|
||||
{
|
||||
VipsImage *surface = vips_image_new();
|
||||
VipsImage **t = (VipsImage **)
|
||||
vips_object_local_array( VIPS_OBJECT( surface ), 4 );
|
||||
vips_object_local_array( VIPS_OBJECT( surface ), 5 );
|
||||
|
||||
VipsRect refr, secr;
|
||||
VipsRect winr, srhr;
|
||||
@ -137,35 +137,37 @@ vips__correl( VipsImage *ref, VipsImage *sec,
|
||||
g_object_unref( surface );
|
||||
return( -1 );
|
||||
}
|
||||
ref = t[0];
|
||||
sec = t[1];
|
||||
|
||||
/* Make sure we have just one band. From vips_*mosaic() we will, but
|
||||
* from vips_match() etc. we may not.
|
||||
*/
|
||||
if( t[0]->Bands != 1 ) {
|
||||
if( vips_extract_band( t[0], &t[2], 0, NULL ) ) {
|
||||
if( ref->Bands != 1 ) {
|
||||
if( vips_extract_band( ref, &t[2], 0, NULL ) ) {
|
||||
g_object_unref( surface );
|
||||
return( -1 );
|
||||
}
|
||||
t[0] = t[2];
|
||||
ref = t[2];
|
||||
}
|
||||
if( t[1]->Bands != 1 ) {
|
||||
if( vips_extract_band( t[1], &t[3], 0, NULL ) ) {
|
||||
if( sec->Bands != 1 ) {
|
||||
if( vips_extract_band( sec, &t[3], 0, NULL ) ) {
|
||||
g_object_unref( surface );
|
||||
return( -1 );
|
||||
}
|
||||
t[1] = t[3];
|
||||
sec = t[3];
|
||||
}
|
||||
|
||||
/* Search!
|
||||
*/
|
||||
if( vips_spcor( t[1], t[0], &surface, NULL ) ) {
|
||||
if( vips_spcor( sec, ref, &t[4], NULL ) ) {
|
||||
g_object_unref( surface );
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
/* Find maximum of correlation surface.
|
||||
*/
|
||||
if( vips_max( surface, correlation, "x", x, "y", y, NULL ) ) {
|
||||
if( vips_max( t[4], correlation, "x", x, "y", y, NULL ) ) {
|
||||
g_object_unref( surface );
|
||||
return( -1 );
|
||||
}
|
||||
|
@ -47,6 +47,38 @@ class TestMosaicing:
|
||||
|
||||
mosaiced_image = None
|
||||
|
||||
for i in range(0, len(MOSAIC_FILES), 2):
|
||||
files = MOSAIC_FILES[i:i + 2]
|
||||
marks = MOSAIC_MARKS[i:i + 2]
|
||||
|
||||
im = pyvips.Image.new_from_file(files[0])
|
||||
sec_im = pyvips.Image.new_from_file(files[1])
|
||||
horizontal_part = im.mosaic(sec_im,
|
||||
pyvips.Direction.HORIZONTAL,
|
||||
marks[0][0], marks[0][1],
|
||||
marks[1][0], marks[1][1])
|
||||
|
||||
if mosaiced_image is None:
|
||||
mosaiced_image = horizontal_part
|
||||
else:
|
||||
vertical_marks = MOSAIC_VERTICAL_MARKS[i - 2:i]
|
||||
mosaiced_image = mosaiced_image.mosaic(horizontal_part,
|
||||
pyvips.Direction.VERTICAL,
|
||||
vertical_marks[1][0], vertical_marks[1][1],
|
||||
vertical_marks[0][0], vertical_marks[0][1])
|
||||
|
||||
# Uncomment to see output file
|
||||
#mosaiced_image.write_to_file('after.jpg')
|
||||
|
||||
# hard to test much more than this
|
||||
assert mosaiced_image.width == 1005
|
||||
assert mosaiced_image.height == 1295
|
||||
assert mosaiced_image.interpretation == pyvips.Interpretation.B_W
|
||||
assert mosaiced_image.bands == 1
|
||||
|
||||
def test_globalbalance(self):
|
||||
mosaiced_image = None
|
||||
|
||||
for i in range(0, len(MOSAIC_FILES), 2):
|
||||
files = MOSAIC_FILES[i:i + 2]
|
||||
marks = MOSAIC_MARKS[i:i + 2]
|
||||
|
Loading…
Reference in New Issue
Block a user