2015-03-13 4 views
1

У меня есть матрица или объект Mat (скажем M) и вектор строки, также объект Mat (скажем, V). Я хочу вычесть V из каждой строки M. Я не могу найти ничего элегантного в openCV для этого, кроме написания собственного кода. Любая помощь?Вычесть вектор из каждой строки матрицы в opencv?

ответ

4

Как примерно минус построчно:

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

Существует не встроенная функция для того, что вы хотите, но то, что об этих вариантах:

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; 
Смежные вопросы