'OpenCV inverse warpPolar output out of frame

When I try to make an inverse polar transformation to my image, the output is outside of the output image. There are also some weird white patterns on the top. I tried to make the output image larger but the circle is on the left side so it didn't help.

I am trying to make a line circle using warpPolar function, for that first I'm flipping the line and giving it a black area as shown on the image, then using the cv2.warpPolar function with WARP_INVERSE_MAP flag.

How can I fully draw the circle, and get its bounding box is my question.

line = np.ones(shape=(20,475),dtype=np.uint8)*255

flipped = cv2.rotate(line,cv2.ROTATE_90_CLOCKWISE)
cv2.imshow('flipped',flipped)

h,w = flipped.shape

radius = int(h / (2*np.pi)) 

new_image = np.zeros(shape=(h,radius+w),dtype=np.uint8)
h2,w2 = new_image.shape

new_image[: ,w2-w:w2] = flipped
cv2.imshow('polar',new_image)

h,w = new_image.shape

center = (w/2,h) 

output= cv2.warpPolar(new_image,center=center,maxRadius=radius,dsize=(1500,1500),flags=cv2.WARP_INVERSE_MAP + cv2.WARP_POLAR_LINEAR)

cv2.imshow('output',output)
cv2.waitKey(0)

transformation images



Solution 1:[1]

Note: I am not getting the same result as you showed above when I tried the same code. You may miss some code lines to add ?

If I didn't misunderstand your problem,you are trying to get this result: (If I am wrong, I will update the answer accordingly)

enter image description here

The only point you are missing is that defining the center and radius. You are making inverse transform here, the input is created by you not warpPolar. Since you are defining size as (1500,1500), you need to update center and radius accordingly. Here is my code giving this result:

import cv2
import numpy as np


line = np.ones(shape=(20,475),dtype=np.uint8)*255

flipped = cv2.rotate(line,cv2.ROTATE_90_CLOCKWISE)
cv2.imshow('flipped',flipped)

h,w = flipped.shape

radius = int(h / (2*np.pi)) 

new_image = np.zeros(shape=(h,radius+w),dtype=np.uint8)
h2,w2 = new_image.shape

new_image[: ,w2-w:w2] = flipped
cv2.imshow('polar',new_image)

h,w = new_image.shape

center = (750,750) 


maxRadius = 750



output= cv2.warpPolar(new_image,center=center,maxRadius=radius,dsize=(1500,1500),flags=cv2.WARP_INVERSE_MAP + cv2.WARP_POLAR_LINEAR)

cv2.imshow('output',output)
cv2.waitKey(0)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Yunus Temurlenk