【发布时间】:2014-10-20 06:17:20
【问题描述】:
我有这样的表达方式:
M(:,[[3,6,9,12]]) = M(:,[3,6,9,12]) .* (U * ones(1,4));
我查看了 Matlab 文档,但没有这样的示例。试图将其翻译成 OpenCV C++。这是我的代码:
cv::Mat temp(M.rows, 4, CV_64F);
M.col(2).copyTo(temp(cv::Rect(0,0,1,M.rows)));
M.col(5).copyTo(temp(cv::Rect(1,0,1,M.rows)));
M.col(8).copyTo(temp(cv::Rect(2,0,1,M.rows)));
M.col(11).copyTo(temp(cv::Rect(3,0,1,M.rows)));
temp = temp.mul(U * cv::Mat::ones(1,4,CV_64F));
temp.col(0).copyTo(M(cv::Rect(2,0,1,M.rows)));
temp.col(1).copyTo(M(cv::Rect(5,0,1,M.rows)));
temp.col(2).copyTo(M(cv::Rect(8,0,1,M.rows)));
temp.col(3).copyTo(M(cv::Rect(11,0,1,M.rows)));
正确吗?据我所知,我无法直接在 OpenCV 中更改这些列,也许 Eigen 可以。也不明白作业左边的双括号。
【问题讨论】:
-
我假设
U是一个标量(即,size1×1)?还是size(M,1)的列向量(即与M具有相同的行数)? -
@Shai
U的大小必须为size(M,1) x 1,.*才能工作;(U * ones(1,4))基本上是repmat(U, 1,4),我想。 -
U是列向量size(2*N, 1),和M的行大小一样,不清楚的地方见谅。
标签: c++ matlab opencv matrix slice