opencv安装教程python,栅格数据投影转换
使用opencv-python球面投影图像
使用opencv-python球面投影图像
目录效果
原理
完整的代码
将一张摄影图像球面投影,效果如图所示
因为opencv-python没有给出球面投影函数,所以只能自己手写算法。 以下是该算法的基本原理。
首先,假设原始图像位于球体表面。 因此,拍摄的图像只能反映x、y二维平面的几何关系,不能表现z方向的几何关系。 因此,必须假设图像位于半径为r的球体表面的下半部分,如图所示。
假设从p点看图像,建立从p点(0,0,h )到球面上图像上的任意一点p2 ) x、y、z )在平面上映射的映射关系,则如下。
是的,如果在p3=PK(p2-p )下,输入p3=) px、py、pz
k=(pz-h )/(z-h ) ) ) )。
px=kx
py=ky
在上式中,x、y可以从原始图像直接获得,z由假定为x、y的球半径r表示:
将上述表达式写在代码中,完整的代码如下
#author: FarryNiu
# https://niuzi fan.blog.csdn.net/article/details/108394740
导入cv2
import numpy as np
img=cv2.imread(ori.jpg ) ) ) )。
rows=img.shape[0]
cols=img.shape[1]
blank=NP.Zeros_like(img )
# blank=NP.zeros ((4000,4000,3 ) )
#圆的中心为图像的中心
center_x=int(Rows/2 ) )
center_y=int(cols/2 ) )
#假设球的半径
r=int () ((Rows**2cols**2) **0.5 )/2 ) 20
#假设映射平面位于z=r
pz=r
forxinrange(Rows ) :
ox=x
x=x - center_x
财富(酷) :
oy=y
y=y - center_y
z=(r*r-x*x-y*y ) ) **0.5
#假设您看到映射点(0,0,2r )
k=(p/(z - 2*r )z-2*r ) ) ) ) ) ) ) 65
px=int(k*x ) )
py=int(k*y ) )
px=px center_x
py=py center_y
blank[px,py,]=img[ox,oy,]
CV2.imwrite(out.jpg )、blank ) )。
使用opencv-python进行图像球面投影的教程