在 opencv 中从每行矩阵中减去一个向量

Subtract a vector from each row of matrix in opencv?

本文关键字:一个 向量 opencv      更新时间:2023-10-16

我有一个矩阵或Mat对象(比如M),还有一个行向量,也是一个Mat对象(比如V)。我想从每行 M 中减去 V。除了自己编写自定义代码之外,我在 openCV 中找不到任何合适的方法来做到这一点。有什么帮助吗?

逐行减号怎么样:

for (int r = 0; r < M.rows; ++r) {
    M.row(r) = M.row(r) - V;
}
没有

内置函数可以满足您想要的内容,但是这些选项呢:

cv::Mat1f M = cv::Mat1f::eye( 3, 3 );
cv::Mat1f V = ( cv::Mat1f( 3, 1 ) << 1.f, 2.f, 3.f );
// 1. Using a for-loop.
//
// More code but uses less memory.
const cv::Size size = M.size();
cv::Mat1f result1 = cv::Mat1f::zeros( 3, 3 );
for ( int y = 0; y < size.height; ++y )
{
    cv::Rect rect( 0, y, size.width, 1 );
    result1( rect ) = M( rect ) - V.t();
}
// 2. Avoiding a for-loop like in Matlab
//
// Less code but uses more memory.
cv::Mat1f ones = cv::Mat1f::ones( 3, 1 );
cv::Mat1f result2 = M - ones * V.t();
std::cout << "M = " << std::endl << M << std::endl;
std::cout << "V = " << V.t() << std::endl;
std::cout << "result1 = " << std::endl << result2 << std::endl;
std::cout << "result2 = " << std::endl << result2 << std::endl;