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 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));
}
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));
}
相关文章推荐
- 常见错误解决方法(一):无法操作数据库
- 对路径"xxxxx"的访问被拒绝(文件操作权限)的解决方法
- “无法解决 equal to 操作的排序规则冲突。”的错误分析和解决方法
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法
- Cookie跨域操作问题及解决方法(asp)
- 解决ASP 2.0中GridView控件的删除、插入、编辑命令操作客户端确认问题的另一方法
- 可视化操作常见错误的解决方法
- aspnet中操作excel报com错误的解决方法
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法
- "操作必须使用一个可更新的查询"错误的解决方法
- DotNet2.0不允许线程互操作各控件的解决方法。
- java连接操作Oracle出现的问题及解决方法
- (转)对路径"xxxxx"的访问被拒绝(文件操作权限)的解决方法
- "超时时间已到。在操作完成之前超时时间已过或服务器未响应"的解决方法
- “无法解决 equal to 操作的排序规则冲突。”的错误分析和解决方法
- Asp.net中操作Excel的权限解决方法
- "执行SQL语句时出现问题操作必须使用一个可更新的查询"错误的解决方法
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法
- asp.net 在IIS下操作Excel文件权限不足的解决方法
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法