具有未知数字类型的OpenCV矩阵乘法

时间:2013-11-01 09:17:55

标签: c++ opencv multiplication mat

我正在进行一些处理,即在OpenCV中使用Mat进行一些矩阵运算,以下行给出了错误:

matC = matA*matB;

这一次,错误并不难识别,因为我已经知道矩阵维度是正确的,它们的数字类型是CV_64FC1或CV_32FC1。

因此,我可以通过识别每个矩阵的数字类型(可能带有一些if-else)来修复此错误,并替换为类型兼容的临时矩阵(Mat)

然而,就OpenCV Mat乘法的实现而言,它是一个好的吗?我们真的要检查操作数吗?每次执行矩阵运算时的数字类型(甚至是通道数,例如CV_64FC3,CV_64FC2)?

是否几乎避免了这种检查?因为matA或matB可能是从函数调用返回的,例如solvePnP(...,matA,matB,...)和matA的数字类型,所以matB未定义

谢谢,

PS:我已经多次使用OpenCV矩阵操作,数字类型,通道数量问题......

编辑01:

对不起我的问题,我很抱歉!但是我尽力使自己清楚

我的问题是:

1)我应该怎样做以及如何确保matC = matA * matB是一个无差错的操作?

2)如果在操作之前应该进行一些检查,那么,每次进行这样的矩阵运算时,我应该这样做吗?有没有更好的选择不复制这种检查?

编辑02:

这是我目前要执行的检查:

tmp1 = Vect32Homo(Mat(objPoints.at<Vec3f>(i)));

if (s1To.depth() !=  tmp1.depth())
{
    printf("Different Number Type!");
    s1To.convertTo(s1To, CV_64FC1);
    tmp1.convertTo(tmp1, CV_64FC1);
}   else
{
    printf("Same Number Type!");
}

tmp = s1To*tmp1;  // error prone operation

正如您可能看到,如果两个矩阵具有不同数量的通道

,则此尝试将不起作用

0 个答案:

没有答案