Dewarp top-down fisheye image to panorama and rewarp panorama to fisheye image.
MIT License
A tool for dewarping and rewarping on a top-down fisheye image by using OpenCV on Python.
pip install FisheyeWarping
Check it in Pypi
fisheyewarping --help
usage: fisheyewarping [-h] [--panorama_output PANORAMA_OUTPUT] [--fisheye_output FISHEYE_OUTPUT] [--save_dewarp_mesh_path SAVE_DEWARP_MESH_PATH] [--save_rewarp_mesh_path SAVE_REWARP_MESH_PATH] [--load_dewarp_mesh_path LOAD_DEWARP_MESH_PATH]
[--load_rewarp_mesh_path LOAD_REWARP_MESH_PATH] [--fisheye_img_path FISHEYE_IMG_PATH] [--panorama_img_path PANORAMA_IMG_PATH] [--use_multiprocessing USE_MULTIPROCESSING]
optional arguments:
-h, --help show this help message and exit
--panorama_output PANORAMA_OUTPUT
Specific path for `output`. Default is `./dewarp-output.png`.
--fisheye_output FISHEYE_OUTPUT
Specific path for `output`. Default is `./rewarp-output.png`.
--save_dewarp_mesh_path SAVE_DEWARP_MESH_PATH
Specific path for saving mesh data for `dewarping`. Default is `None`.
--save_rewarp_mesh_path SAVE_REWARP_MESH_PATH
Specific path for saving mesh data for `rewarping`. Default is `None`.
--load_dewarp_mesh_path LOAD_DEWARP_MESH_PATH
Specific path for loading mesh data for `dewarping`. Default is `None`.
--load_rewarp_mesh_path LOAD_REWARP_MESH_PATH
Specific path for loading mesh data for `rewarping`. Default is `None`.
--fisheye_img_path FISHEYE_IMG_PATH
Specific path of your fisheye image for dewarping to a panorama.
--panorama_img_path PANORAMA_IMG_PATH
Specific path of your panorama image for rewarping to a fisheye image.
--use_multiprocessing USE_MULTIPROCESSING
Use multiprocessing to get mesh. Default is `True`.
In the first time, you will need to build a mesh file for dewarping.
fisheyewarping \
--save_dewarp_mesh_path ./dewarp-mesh.pkl \
--fisheye_img_path ./test-fisheye.jpg
import cv2
from fisheyewarping import FisheyeWarping
fisheye_img = cv2.imread('./test-fisheye.jpg')
frd = FisheyeWarping(fisheye_img, use_multiprocessing=True)
frd.build_dewarp_mesh(save_path='./dewarp-mesh.pkl')
frd.run_dewarp(save_path='./dewarp-output.png')
In the next time, you just load the mesh and feel free to go.
fisheyewarping \
--load_dewarp_mesh_path ./dewarp-mesh.pkl \
--fisheye_img_path ./test-fisheye.jpg
import cv2
from fisheyewarping import FisheyeWarping
fisheye_img = cv2.imread('./test-fisheye.jpg'.)
frd = FisheyeWarping(fisheye_img, use_multiprocessing=True)
frd.load_dewarp_mesh(save_path='./dewarp-mesh.pkl')
frd.run_dewarp(save_path='./dewarp-output.png')
In the first time, you will need to build 2 mesh files for dewarping and rewarping by using one fisheye image.
fisheyewarping \
--save_dewarp_mesh_path ./dewarp-mesh.pkl \
--save_rewarp_mesh_path ./rewarp-mesh.pkl \
--fisheye_img_path ./test-fisheye.jpg
import cv2
from fisheyewarping import FisheyeWarping
fisheye_img = cv2.imread('./test-fisheye.jpg'.)
frd = FisheyeWarping(fisheye_img, use_multiprocessing=True)
frd.build_dewarp_mesh(save_path='./dewarp-mesh.pkl')
frd.build_rewarp_mesh(save_path='./rewarp-mesh.pkl')
panorama_img = cv2.imread('./test-panorama.jpg'.)
frd.run_rewarp_with_mesh(panorama_img, save_path='./rewarp-output.png')
In the next time, you just load the meshes and feel free to go.
fisheyewarping \
--load_dewarp_mesh_path ./dewarp-mesh.pkl \
--load_rewarp_mesh_path ./rewarp-mesh.pkl \
--panorame_img_path ./test-panorama.jpg
import cv2
from fisheyewarping import FisheyeWarping
frd = FisheyeWarping(None, use_multiprocessing=True)
frd.load_dewarp_mesh(save_path='./dewarp-mesh.pkl')
frd.load_rewarp_mesh(save_path='./rewarp-mesh.pkl')
panorama_img = cv2.imread('./test-panorama.jpg'.)
frd.run_rewarp_with_mesh(panorama_img, save_path='./rewarp-output.png')
The source of mesh image is from (http://paulbourke.net/dome/fish2/).
Here is the mesh image for this tool, it shows the transformation from the original fisheye image to the panorama image.