代码语言:javascript复制
import cv2
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png',cv.IMREAD_ANYCOLOR)#原始图像
M1=20
M2=50
M3=90
rst1=cv2.logPolar(img,(251,249),M1,cv.WARP_FILL_OUTLIERS)#笛卡儿坐标转极坐标
rst2=cv2.logPolar(img,(251,249),M2,cv.WARP_FILL_OUTLIERS)#笛卡儿坐标转极坐标
rst3=cv2.logPolar(img,(251,249),M3,cv.WARP_FILL_OUTLIERS)#笛卡儿坐标转极坐标
cv.imshow("img",img)
cv.imshow("rst1",rst1)
cv.imshow("rst2",rst2)
cv.imshow("rst3",rst3)
cv2.waitKey()
cv2.destroyAllWindows()
算法:图像校正是通过坐标变换来校正图像中的圆形物体或被包含在圆环中的物体。
极坐标和笛卡儿坐标的一一对应关系:
其中,(θ,r)表示极坐标,
表示笛卡尔坐标。
dst=cv2.linearPolar(src, center, maxRadius, flags)
- src表示输入图像
- center表示极坐标变换中心
- maxRadius表示极坐标变换最大距离
- flags表示插值方法
dst=cv2.logPolar(src, dst, center, M, flags)
- src表示输入图像
- center表示极坐标变换中心
- M表示极坐标变换系数
- flags表示转换方向
注意:函数linearPolar()有两个缺点,第一是变换时的步长不可控,第二是只能对整个圆进行变换。M的值越大,图像经过变换后的信息越多。