Wrap image around a circle

前端 未结 2 791
眼角桃花
眼角桃花 2021-02-06 04:00

What I\'m trying to do in this example is wrap an image around a circle, like below.

To wrap the image I simply calculated the x,y coordinates using tr

2条回答
  •  太阳男子
    2021-02-06 04:40

    I think what you need is a noise filter. There are many implementations from which I think Gaussian filter would give a good result. You can find a list of filters here. If it gets blurred too much:

    • keep your first calculated image
    • calculate filtered image
    • copy fixed pixels from filtered image to first calculated image

    Here is a crude average filter written by hand:

    cir_R = int(Ro*2) # outer circle 2*r
    inner_r = int(Ro - 0.5 - len(img)) # inner circle r
    for i in range(1, cir_R-1):
        for j in range(1, cir_R-1):
            if cir[i][j] == 0: # missing pixel
                dx = int(i-Ro)
                dy = int(j-Ro)
                pix_r2 = dx*dx + dy*dy # distance to center
                if pix_r2 <= Ro*Ro and pix_r2 >= inner_r*inner_r:
                    cir[i][j] = (cir[i-1][j] + cir[i+1][j] + cir[i][j-1] +
                        cir[i][j+1])/4
    
    
    shom_im(cir)
    

    and the result:

    This basically scans between two ranges checks for missing pixels and replaces them with average of 4 pixels adjacent to it. In this black white case it is all white.

    Hope it helps!

提交回复
热议问题