您的位置:首页 > 编程语言 > Python开发

鱼眼镜头图像畸变矫正(fish eye distortion)

2017-02-23 23:13 585 查看
from PIL import Image
import math

def fish_eye_dis(img):
"fish eye distortion"
width_in, height_in = img.size;
im_out = Image.new("RGB",(width_in,height_in));
radius = max(width_in, height_in)/2;
#assume the fov is 180
#R = f*theta
lens = radius*2/math.pi;
for i in range(width_in):
for j in range(height_in):
#offset to center
x = i - width_in/2;
y = j - height_in/2;
r = math.sqrt(x*x + y*y);
theta = math.atan(r/radius);
if theta<0.00001:
k = 1;
else:
k = lens*theta/r;

src_x = x*k;
src_y = y*k;
src_x = src_x+width_in/2;
src_y = src_y+height_in/2;
pixel = im.getpixel((src_x,src_y));
im_out.putpixel((i,j),pixel);

return im_out;

if __name__=="__main__":
input_name = "image0.jpg";
output_name = "image_dis.jpg";
im = Image.open(input_name);
img_out = fish_eye_dis(im);
img_out.save(output_name);

print "fish eye distortion completely, save image to %s" % output_name


效果如下:

原图



矫正后



原理参考:Fisheye lens Wikis

源代码地址(oschina.net):fish eye distortion.py

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息