def rotMatrix2AxisAndAngle(R):
angle = np.arccos((R[<NUM_LIT:0>, <NUM_LIT:0>] + R[<NUM_LIT:1>, <NUM_LIT:1>] + R[<NUM_LIT:2>, <NUM_LIT:2>] - <NUM_LIT:1>)/ <NUM_LIT:2>)<EOL>axis = np.array([<EOL>(R[<NUM_LIT:2>, <NUM_LIT:1>] - R[<NUM_LIT:1>, <NUM_LIT:2>])/ np.sqrt((R[<NUM_LIT:2>, <NUM_LIT:1>] - R[<NUM_LIT:1>, <NUM_LIT:2>])<EOL>** <NUM_LIT:2> + (R[<NUM_LIT:0>, <NUM_LIT:2>] - R[<NUM_LIT:2>, <NUM_LIT:0>])**<NUM_LIT:2> + (R[<NUM_LIT:1>, <NUM_LIT:0>] - R[<NUM_LIT:0>, <NUM_LIT:1>])**<NUM_LIT:2>),<EOL>(R[<NUM_LIT:0>, <NUM_LIT:2>] - R[<NUM_LIT:2>, <NUM_LIT:0>])/ np.sqrt((R[<NUM_LIT:2>, <NUM_LIT:1>] - R[<NUM_LIT:1>, <NUM_LIT:2>])<EOL>** <NUM_LIT:2> + (R[<NUM_LIT:0>, <NUM_LIT:2>] - R[<NUM_LIT:2>, <NUM_LIT:0>])**<NUM_LIT:2> + (R[<NUM_LIT:1>, <NUM_LIT:0>] - R[<NUM_LIT:0>, <NUM_LIT:1>])**<NUM_LIT:2>),<EOL>(R[<NUM_LIT:1>, <NUM_LIT:0>] - R[<NUM_LIT:0>, <NUM_LIT:1>])/ np.sqrt((R[<NUM_LIT:2>, <NUM_LIT:1>] - R[<NUM_LIT:1>, <NUM_LIT:2>])**<NUM_LIT:2> + <EOL>(R[<NUM_LIT:0>, <NUM_LIT:2>] - R[<NUM_LIT:2>, <NUM_LIT:0>])**<NUM_LIT:2> + (R[<NUM_LIT:1>, <NUM_LIT:0>] - R[<NUM_LIT:0>, <NUM_LIT:1>])**<NUM_LIT:2>)])<EOL>return axis, angle<EOL>
stackoverflow.com/questions/12463487/obtain-rotation-axis-from-rotation-matrix-and-translation-vector-in-opencv

R : 3x3 rotation matrix
returns axis, angle