Создание изображения типа оптической иллюзии с Python - PullRequest
0 голосов
/ 21 марта 2020

Итак, у меня есть упражнение, чтобы выполнить функцию, которая создает изображение типа оптической иллюзии, например:

enter image description here

Изображение должен иметь размеры 100x100, и метод должен получить угол между 0 и 360 градусами, который является углом между каждым сектором (который, я думаю, они означают угол между каждой линией).

Я пытался сделать это, используя функция line_aa из skimage.draw. Что я делаю, так это сначала конвертирую угол в радианы. Затем я создаю переменные x и negx, которые являются крайними точками каждой линии. Затем я делаю некоторое время l oop, пока x не достигнет края изображения. В то время как l oop я вычисляю противоположную сторону угла (расстояние между линиями), рисую линию от negx до x, а затем увеличиваю две переменные с помощью значения противоположной стороны, вычисленного ранее. Наконец я увеличиваю угол, чтобы нарисовать следующую линию. Затем я делаю то же самое для оси y.

def makeImg(ang):
    image = np.zeros((100,100), np.uint8) 
    ang*=np.pi/180  
    origAng=ang
    adj=50  
    x=50
    negx=50
    while(x<99):  
        opos=adj*np.tan(ang) 
        l,c,val = line_aa(negx,99,x,0)
        image[l,c] = val*255
        l,c,val = line_aa(x,99,negx,0)
        image[l,c] = val*255
        negx-=int(opos)   
        x+=int(opos)
        ang+=origAng

    ang=origAng
    y=50
    negy=50
    while(y<99):
        opos=adj*np.tan(ang)
        l,c,val = line_aa(0,negy,99,y)
        image[l,c] = val*255
        l,c,val = line_aa(0,y,99,negy)
        image[l,c] = val*255
        negy-=int(opos)
        y+=int(opos)
        ang+=origAng

    cv2.imshow('img',image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

, что делает что-то вроде этого (я изменил значения, чтобы сделать изображение размером 500x500, чтобы его было легче видеть):

enter image description here

Я знаю, что эта функция немного (много) изношена, но это было единственное, что я мог придумать. Если бы кто-то мог помочь, я был бы очень признателен!

...