fix optional output args in python
oh arg we have to return a dict also, test hough circle and line, and add maxpos/minpos
This commit is contained in:
parent
1c1f7a205a
commit
4968b9edaf
6
TODO
6
TODO
@ -1,12 +1,6 @@
|
||||
|
||||
- python:
|
||||
|
||||
- maxpos?
|
||||
|
||||
perhaps:
|
||||
|
||||
v, x, y = im.max(x = True, y = True)
|
||||
|
||||
- could import like this:
|
||||
|
||||
from gi.repository import Vips
|
||||
|
@ -1,7 +1,6 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import unittest
|
||||
import gc
|
||||
|
||||
#import logging
|
||||
#logging.basicConfig(level = logging.DEBUG)
|
||||
@ -359,12 +358,34 @@ class TestArithmetic(unittest.TestCase):
|
||||
self.assertEqual(hist.bands, 1)
|
||||
|
||||
def test_hough_circle(self):
|
||||
im = Vips.Image.black(100, 100).draw_circle(100, 50, 50, 40)
|
||||
test = Vips.Image.black(100, 100).draw_circle(100, 50, 50, 40)
|
||||
|
||||
for fmt in all_formats:
|
||||
im = test.cast(fmt)
|
||||
hough = im.hough_circle(min_radius = 35, max_radius = 45)
|
||||
|
||||
v, x, y = hough.maxpos()
|
||||
vec = hough.getpoint(x, y)
|
||||
r = vec.index(v) + 35
|
||||
|
||||
self.assertAlmostEqual(x, 50)
|
||||
self.assertAlmostEqual(y, 50)
|
||||
self.assertAlmostEqual(r, 40)
|
||||
|
||||
def test_hough_line(self):
|
||||
test = Vips.Image.black(100, 100).draw_line(100, 10, 90, 90, 10)
|
||||
|
||||
for fmt in all_formats:
|
||||
im = test.cast(fmt)
|
||||
hough = im.hough_line()
|
||||
|
||||
v, x, y = hough.maxpos()
|
||||
|
||||
angle = 360.0 * x / hough.width
|
||||
distance = test.height * y / hough.height
|
||||
|
||||
self.assertAlmostEqual(angle, 45)
|
||||
self.assertAlmostEqual(distance, 70)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
@ -199,9 +199,12 @@ def _call_base(name, required, optional, self = None, option_string = None):
|
||||
if x.flags & enm.INPUT and x.flags & enm.MODIFY:
|
||||
out.append(x.get_value())
|
||||
|
||||
out_dict = {}
|
||||
for x in optional.keys():
|
||||
if x in optional_output:
|
||||
out.append(optional_output[x].get_value())
|
||||
out_dict[x] = optional_output[x].get_value()
|
||||
if out_dict != {}:
|
||||
out.append(out_dict)
|
||||
|
||||
if len(out) == 1:
|
||||
out = out[0]
|
||||
@ -304,6 +307,18 @@ def vips_image_write_to_buffer(self, vips_filename, **kwargs):
|
||||
def vips_bandsplit(self):
|
||||
return [self.extract_band(i) for i in range(0, self.bands)]
|
||||
|
||||
def vips_maxpos(self):
|
||||
v, opts = self.max(x = True, y = True)
|
||||
x = opts['x']
|
||||
y = opts['y']
|
||||
return v, x, y
|
||||
|
||||
def vips_minpos(self):
|
||||
v, opts = self.min(x = True, y = True)
|
||||
x = opts['x']
|
||||
y = opts['y']
|
||||
return v, x, y
|
||||
|
||||
# apply a function to a thing, or map over a list
|
||||
# we often need to do something like (1.0 / other) and need to work for lists
|
||||
# as well as scalars
|
||||
@ -480,6 +495,8 @@ Vips.Image.write_to_buffer = vips_image_write_to_buffer
|
||||
# a few useful things
|
||||
Vips.Image.floor = vips_floor
|
||||
Vips.Image.bandsplit = vips_bandsplit
|
||||
Vips.Image.maxpos = vips_maxpos
|
||||
Vips.Image.minpos = vips_minpos
|
||||
Vips.Image.real = vips_real
|
||||
Vips.Image.imag = vips_imag
|
||||
Vips.Image.polar = vips_polar
|
||||
|
Loading…
Reference in New Issue
Block a user