您的位置:首页 > 运维架构

OpenCV中对矩阵的行列操作的解决方法

2017-05-09 21:32 155 查看
opencv Mat中,为什么img.row(i) = img.row(j)不能修改m的第i行,而img.row(i) = img.row(j) + 0就可以修改?

img.row(j) 返回的是Mat; Mat = Mat;是不会拷贝数据的。所以第J行无法复制到第i行。

img.row(j) + 0是表达式,返回的是MatExpr; Mat = MatExpr ; 是会拷贝数据的。所以第j行会复制到第i行

考虑这种问题提出一种解决方案:

针对比如这种操作:

Mat h,s;
for(int i=1;i<ih.cols;i++)
h.col(i) = h.col(i-1) + 0.5*(s.col(i)+s.col(i-1));
用一个列矩阵作为中间变量解决:
Mat temp1=Mat::zeros(h.rows,1,CV_32FC1);
Mat temp2=Mat::zeros(h.rows,1,CV_32FC1);
Mat temp3=Mat::zeros(h.rows,1,CV_32FC1);
Mat temp=Mat::zeros(h.rows,1,CV_32FC1);

for(int i=1;i<imag.rows;i++)
{
h.col(i-1).copyTo(temp1.col(0));
s.col(i-1).copyTo(temp2.col(0));
s.col(i).copyTo(temp3.col(0));
temp = temp1 + temp2+temp3;
temp.col(0).copyTo(h.col(i));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐