From 48e5aa8060791d114fcac16ec43b80a81ece2528 Mon Sep 17 00:00:00 2001 From: KernelA Date: Tue, 10 Nov 2020 12:52:18 +0300 Subject: [PATCH 1/3] Argparse added --- nfov.py | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/nfov.py b/nfov.py index efbc2fe..faf50b0 100644 --- a/nfov.py +++ b/nfov.py @@ -12,9 +12,18 @@ # See the License for the specific language governing permissions and # limitations under the License. +import argparse from math import pi +import os + +import imageio as im import numpy as np +def is_file(arg): + if not os.path.isfile(arg): + raise argparse.ArgumentTypeError("An input file does not exist") + return arg + class NFOV(): def __init__(self, height=400, width=800): self.FOV = [0.45, 0.45] @@ -88,9 +97,6 @@ def _bilinear_interpolation(self, screen_coord): CC = np.multiply(C, np.array([wc, wc, wc]).T) DD = np.multiply(D, np.array([wd, wd, wd]).T) nfov = np.reshape(np.round(AA + BB + CC + DD).astype(np.uint8), [self.height, self.width, 3]) - import matplotlib.pyplot as plt - plt.imshow(nfov) - plt.show() return nfov def toNFOV(self, frame, center_point): @@ -104,11 +110,24 @@ def toNFOV(self, frame, center_point): spericalCoord = self._calcSphericaltoGnomonic(convertedScreenCoord) return self._bilinear_interpolation(spericalCoord) +def main(args): + img = im.imread(args.pano) + nfov = NFOV(args.tile_height, args.tile_width) + # camera center point (valid range [0,1]) + center_point = np.array(args.center_point) + tile = nfov.toNFOV(img, center_point) + im.imwrite(args.output_tile, tile) # test the class if __name__ == '__main__': - import imageio as im - img = im.imread('images/360.jpg') - nfov = NFOV() - center_point = np.array([0.5, .5]) # camera center point (valid range [0,1]) - nfov.toNFOV(img, center_point) + parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument("-i", "--input_pano", type=is_file, dest="pano", help="A path to input 360 pano", required=True) + parser.add_argument("-c", "--center_point", nargs=2, type=float, default=[0.5, 0.5], help="A camera center [0; 1]") + parser.add_argument("-tw", "--tile_width", type=int, help="A target tile width", required=True) + parser.add_argument("-th", "--tile_height", type=int, help="A target tile height", required=True) + parser.add_argument("-o", "--output_tile", type=str, help="A path to output tile", required=True) + + args = parser.parse_args() + main(args) + + From 616594b11298d1cb83e5dd1523c9c3288f1e55c0 Mon Sep 17 00:00:00 2001 From: KernelA Date: Tue, 10 Nov 2020 12:52:35 +0300 Subject: [PATCH 2/3] requirements.txt added --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..235b44f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +numpy +imageio \ No newline at end of file From 49b6cdc9e826d99ec91ccfa1295bf60ee29db373 Mon Sep 17 00:00:00 2001 From: KernelA Date: Tue, 10 Nov 2020 13:00:28 +0300 Subject: [PATCH 3/3] Exampe usgae added --- nfov.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nfov.py b/nfov.py index faf50b0..83f4a7d 100644 --- a/nfov.py +++ b/nfov.py @@ -120,7 +120,10 @@ def main(args): # test the class if __name__ == '__main__': - parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) + example_text = '''example: + python .\\nfov.py -i .\\images\\360.jpg -tw 800 -th 400 -o .\\res.jpg + ''' + parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter, epilog=example_text) parser.add_argument("-i", "--input_pano", type=is_file, dest="pano", help="A path to input 360 pano", required=True) parser.add_argument("-c", "--center_point", nargs=2, type=float, default=[0.5, 0.5], help="A camera center [0; 1]") parser.add_argument("-tw", "--tile_width", type=int, help="A target tile width", required=True)