Can a quaternion be used to convert between coordinate systems?
I'm not into quats at all, but here's something I noticed, which may or may not be of any use.

Swap y and z in a matrix and look at the quat:

&gt;&gt;&gt; Matrix(((1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1))).to_quaternion()
Quaternion((1.0, 0.0, 0.0, 0.0))

&gt;&gt;&gt; Matrix(((1,0,0,0),(0,0,1,0),(0,1,0,0),(0,0,0,1))).to_quaternion()
Quaternion((0.9999999403953552, 0.0, 0.0, 0.0))

# both matrices give different orientations, but not the quats!


And here's a custom space matrix:

&gt;&gt;&gt; Matrix(((1,0,0,0),(0,0,-1,0),(0,1,0,0),(0,0,0,1))).to_quaternion()
Quaternion((0.7071068286895752, 0.7071068286895752, 0.0, 0.0))

&gt;&gt;&gt; Matrix(((1,0,0,0),(0,0,1,0),(0,-1,0,0),(0,0,0,1))).to_quaternion()
Quaternion((0.7071068286895752, -0.7071068286895752, 0.0, 0.0))


Note the difference 1.0 / 0.0 vs. 0.7 / 0.7 (whereas the matrices are normalized, with using zeroes and ones only) - it might not be enough to negate the sign of a quat component.

I suggest you create a custom matrix for the space conversion and cast it to quat.