我有这个表达式:
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
是一个标量(即size
为 1-by-1)?还是一个列向量,大小为M,1
(即与M
具有相同的行数)? - ShaiU
必须是大小为size(M,1) x 1
才能使用.*
运算符;(U * ones(1,4))
基本上等同于repmat(U, 1,4)
,我想。 - Nicu StiurcaU
是列向量size(2*N, 1)
,与M
具有相同的行大小,如果不清楚,很抱歉。 - aledalgrande