我尝试使用方法convertPointsFromHomogeneous
,如下所示:
Mat coord(1, 3, CV_32F, Scalar(3)),
homo;
cout<<coord<<endl
<<coord.channels()<<", "<<coord.size()<<endl;
cv::convertPointsFromHomogeneous(coord, homo);
cout
给了我:
[3, 3, 3]
1, [3 x 1]
而convertPointsFromHomogeneous
收到错误消息:
OpenCV错误:输入数组的大小不正确(数量为 通道或列或行必须= 1)in cvConvertPointsHomogeneous,文件...... \ modules \ c alib3d \ src \ fundam.cpp,第865行
var coord
只有一行,那么错误究竟发生在哪里?
我跟踪了源代码 fundam.cpp ,第862行:
else
{
if( !((src->rows > 1) ^ (CV_MAT_CN(src->type) > 1)) )
CV_Error( CV_StsBadSize, "Either the number of channels or columns or rows must be =1" );
s_dims = CV_MAT_CN(src->type)*src->rows;
s_count = src->cols;
}
var src->rows
为1
,src->type
为0x42424005
,这使得CV_MAT_CN(src->type)
为1
,所以我怀疑逻辑是错了,是真的吗?