Python-openCV极坐标变换(图像变换)

#coding=utf-8
import numpy as np
import cv2
def img_polar_transform(input_img,center,r_range,theta_rangge=(0,360),r_step=0.5,theta_step=360.0/(180*8)):
    minr,maxr=r_range
    mintheta,maxtheta=theta_rangge
    H=int((maxr-minr)/r_step+1)
    W=int((maxtheta-mintheta)/theta_step+1)
    output_img=125*np.ones((H,W),input_img.dtype)
    x_center,y_center=center
    #极坐标变换
    r=np.linspace(minr,maxr,H)
    r=np.tile(r,(W,1))
    r=np.transpose(r)#矩阵的转置
    theta=np.linspace(mintheta,maxtheta,W)
    theta=np.tile(theta,(H,1))#在垂直方向重复H次,水平重复1次
    x,y=cv2.polarToCart(r,theta,angleInDegrees=True)
    #最邻近插值
    for i in range(H):
        for j in range(W):
            px=int(round(x[i,j])+x_center)
            py = int(round(y[i, j]) + y_center)
            if ((px>=0 and px<=W-1) and (py>=0 and py<=H-1)):
                output_img[i,j]=input_img[px,py]
    return output_img
input_img = cv2.imread('timg.jpeg', cv2.CV_LOAD_IMAGE_GRAYSCALE)
h,w=input_img.shape[:2]
center=(int(h/2),int(w/2))
r_range=(0,300)
output_img=img_polar_transform(input_img,center,r_range)
cv2.imshow('img',input_img)
cv2.imshow('polar',output_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值