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