从OpenCV中的cv::Mat对象中减去固定值

从OpenCV中的cv::Mat对象中减去固定值,opencv,matrix,Opencv,Matrix,我对OpenCV还比较陌生,对它有点了解。我知道,cv::Mat类中的矩阵运算符被重载以执行A.mult(B)、A+B、A-B、A/B等操作 我有两个向量,它们是图像行和列的投影。我有两个图像(S和T),因此每个图像都有两个投影向量(RowProjections、columnProjectionS、RowProjectOnt、ColumnProjectOnt)。我也有图像的手段(手段,手段)。我需要做一个“积和”相关的计算,在MATLAB中如下 numeratorLambdaRo = sum((

我对OpenCV还比较陌生,对它有点了解。我知道,
cv::Mat
类中的矩阵运算符被重载以执行A.mult(B)、A+B、A-B、A/B等操作

我有两个向量,它们是图像行和列的投影。我有两个图像(S和T),因此每个图像都有两个投影向量(RowProjections、columnProjectionS、RowProjectOnt、ColumnProjectOnt)。我也有图像的手段(手段,手段)。我需要做一个“积和”相关的计算,在MATLAB中如下

numeratorLambdaRo = sum((rowProjectionT - meanT).*(rowProjectionS - meanS));
denominatorLambdaRo = sqrt(sum((rowProjectionT - meanT).^2)*sum((rowProjectionS - meanS).^2);

LambaRo = numeratorLambdaRo/denominatorLambdaRo;

我不能完全确定在
cv::Mat
对象的上下文中矩阵运算符的功能。

将其意思声明为double或cv::Scalar,您可以从矩阵中减去它。您可以拆分您的操作:

rowProjectionT -= meanT;
rowProjectionS -= meanS;
numeratoLambdaRo = cv::sum(rowProjectionT*rowProjectionS.t()); // transpose 1 of the vector so that multiplication is equivalent to dot product.

cv::Mat rowProjTSquare = rowProjectionT*rowProjectionT.t();
cv::Mat rowProjSSquare = rowProjectionS*rowProjectionS.t();
denominatorLambdaRo = sqrt(cv::sum(rowProjTSquare*rowProjSSquare));

@雷米..谢谢你的解决方案!我试图用我的MMU玩另一个游戏(通过使用cv::isContinuous()函数)…如果幸运的话,那么内存分配应该是连续的,因此可以通过Mat::data指针提取数据。希望这是另一个解决方案。但是+1对你来说,因为你的解决方案不涉及指针,我个人讨厌指针(因为我是一名java开发人员,通过skills:P)嗨…@Remi…你的矩阵与*号相乘不起作用!是否需要一些头文件来建议运算符重载?请检查矩阵维度。它可能是rowProjTSquare=rowProjT.t()*rowProjectionT。在一种情况下,你会得到一个标量(1x1矩阵),在另一种情况下,你会得到一个(dxd)矩阵,其中d是向量的维数。你应该利用更高级别的矩阵功能,而不是与原始数据混淆,除非你是一个真正优秀的程序员。这些操作应该在库中实现得相当整齐Hi..我检查了两个矩阵是否都是空的:(还有其他方法吗?我这样做了:
rowProjTSquare.c.row(0)//Gives error
rowProjTSquare.c.s.val[0]//没有给出任何想法:(?对不起,我已经尝试了很长时间,(不知道有多难才够难)