-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerate.py
50 lines (42 loc) · 1.3 KB
/
generate.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
"""
generate
Usage:
generate.py <descriptor> <image>...
Options:
-h --help Show this screen.
--version Show the version.
<descriptor> can be one of the following:
* akaze (outputs 61 bytes)
* kaze (outputs 64 32-bit floats)
"""
import sys
import struct
import itertools
import cv2
from progress.bar import Bar
from docopt import docopt
if __name__ == '__main__':
ARGUMENTS = docopt(__doc__, options_first=True, version='1.0.0')
IMAGES = ARGUMENTS["<image>"]
DESCRIPTOR = ARGUMENTS["<descriptor>"]
BAR = Bar('Progress', max=len(IMAGES))
if DESCRIPTOR == "akaze":
DESCRIPTOR_OBJECT = cv2.AKAZE.create()
BINARY = True
elif DESCRIPTOR == "kaze":
DESCRIPTOR_OBJECT = cv2.KAZE.create()
BINARY = False
else:
sys.exit("unknown descriptor {}".format(DESCRIPTOR))
for filename in IMAGES:
image = cv2.imread(filename)
keypoints, descriptors = DESCRIPTOR_OBJECT.detectAndCompute(
image, None)
for descriptor in descriptors:
if BINARY:
sys.stdout.buffer.write(descriptor)
else:
sys.stdout.buffer.write(bytes(itertools.chain.from_iterable(
map(lambda f: struct.pack('<f', f), descriptor))))
BAR.next()
BAR.finish()