Imagemagick的+distort DePolar
documentation说,该命令将图像从极性转换为笛卡尔,并保留极性图像的长宽比。
在OpenCV中有与此等效的东西吗?我一直在看linearPolar
,但功能似乎更复杂。
编辑:linearPolar
接近+distort DePolar
,但是Imagemagick命令正确地更改了生成图像的大小,而linearPolar
并没有更改尺寸。
答案 0 :(得分:1)
warpPolar
是正确使用的函数,因为它允许指定dsize
,与linearPolar
不同。
以下是产生与Imagemagick命令基本相同的结果的代码:
import cv2 as cv
import numpy as np
def undistort(img):
height, width, *_ = img.shape
assert height == width, "we want a square image"
radius = int(height / 2)
image_center = radius, radius
dest_width = int(np.ceil(np.pi * radius))
dest_height = int(np.ceil(radius))
dest_size = (dest_height, dest_width)
undistorted_img = cv.warpPolar(src=img, dsize=dest_size, center=image_center, maxRadius=radius, flags=0)
return cv.rotate(undistorted_img, cv.ROTATE_90_CLOCKWISE)