Как правильно выровнять куб по маркеру в OpenGL? - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь визуализировать куб поверх маркера обнаружения в openGL.Я делаю это так.

    rmtx = cv2.Rodrigues(rvec)[0]
    m1 = np.array([[rmtx[0][0],rmtx[0][1],rmtx[0][2],tvec[0][0][0]],
                    [rmtx[1][0],rmtx[1][1],rmtx[1][2],tvec[0][0][1]],
                    [rmtx[2][0],rmtx[2][1],rmtx[2][2],tvec[0][0][2]],
                    [0.0       ,0.0       ,0.0       ,1.0    ]])
    Inverse_mat = np.array([[ 1.0, 1.0, 1.0, 1.0],
                       [-1.0,-1.0,-1.0,-1.0],
                       [-1.0,-1.0,-1.0,-1.0],
                       [ 1.0, 1.0, 1.0, 1.0]])
    m1 = m1 * Inverse_mat
    m1 = np.transpose(m1)

После загрузки матрицы m1 появляется оператор glutSolidCube ().Проблема в том, что куб не находится на видимом экране openGL.Я даже масштабировал и сдвигал параметры tvec для m1.

X = np.array([[1,0,0,x shift],
                        [0,1,0,y shift],
                        [0,0,1,z shift],
                        [0,0,0,1]])
    Y = np.array([[tvec[0][0][0]],
                         [tvec[0][0][1]],
                         [tvec[0][0][2]],
                         [1]])
    tvec = np.array([[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X])
    m1 = np.array([[rmtx[0][0],rmtx[0][1],rmtx[0][2],tvec[0]/scale x],
                    [rmtx[1][0],rmtx[1][1],rmtx[1][2],tvec[1]/scale y],
                    [rmtx[2][0],rmtx[2][1],rmtx[2][2],tvec[2]/scale z],
                    [0.0       ,0.0       ,0.0       ,1.0    ]])

. Это приводит к тому, что куб перемещается над маркером, но он не выровнен должным образом.

Кроме того, значения, используемые для масштабирования и сдвига, соответствуют моему экрану, и я хочу общее решение.Что мне делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...