1

我正在进行一些处理,即在 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

如您所见,如果两个矩阵具有不同数量的通道,则此尝试将不起作用

4

0 回答 0