Revision history [back]

Fixed Size Matrix Conversions

This does not compile:

   cv::Matx33f M3x3;
cv::Vec3f v3x1 = M3x3.col(0); // compile error:


with error (on VS2008):

error C2440: 'initializing' : cannot convert from 'cv::Matx<_Tp,m,n>' to 'cv::Vec<_Tp,cn>'
with
[
_Tp=float,
m=3,
n=1
]
and
[
_Tp=float,
cn=3
]
No constructor could take the source type, or constructor overload resolution was ambiguous


That's because although Vec3f derived from Matx33f there is no proper constructor that allows this to happen.
So 2 questions:

1. What would be the cleanest way to make this assignment.
2. Why not add such a constructor?
I guess it would also have to accept this: cv::Vec3f v3x1 = M3x3.row(0);.

Fixed Size Matrix Conversions

This does not compile: compile:

   cv::Matx33f M3x3;
cv::Vec3f v3x1 = M3x3.col(0); // compile error:


with error (on VS2008):

error C2440: 'initializing' : cannot convert from 'cv::Matx<_Tp,m,n>' to 'cv::Vec<_Tp,cn>'
with
[
_Tp=float,
m=3,
n=1
]
and
[
_Tp=float,
cn=3
]
No constructor could take the source type, or constructor overload resolution was ambiguous


That's because although Vec3f derived from Matx33f there is no proper constructor that allows this to happen.
So 2 questions:

1. What would be the cleanest way to make this assignment.
2. Why not add such a constructor?
I guess it would also have to accept this: cv::Vec3f v3x1 = M3x3.row(0);.

Fixed Size Matrix Conversions

This does not compile:

   cv::Matx33f M3x3;
cv::Vec3f  v3x1 = M3x3.col(0); // compile error:
error
cv::Matx31f m3x1 = M3x3.col(0); // this is ok


with error (on VS2008):

error C2440: 'initializing' : cannot convert from 'cv::Matx<_Tp,m,n>' to 'cv::Vec<_Tp,cn>'
with
[
_Tp=float,
m=3,
n=1
]
and
[
_Tp=float,
cn=3
]
No constructor could take the source type, or constructor overload resolution was ambiguous


That's because although Vec3f derived from Matx33fMatx31f there is no proper constructor that allows this to happen.
So 2 questions:

1. What would be the cleanest way to make this assignment.
2. Why not add such a constructor?
I guess it would also have to accept this: cv::Vec3f v3x1 = M3x3.row(0);.