我正在进行一些处理,即在 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
如您所见,如果两个矩阵具有不同数量的通道,则此尝试将不起作用