从 cv::Mat 获取部分数据
Posted
技术标签:
【中文标题】从 cv::Mat 获取部分数据【英文标题】:Get part of data from cv::Mat 【发布时间】:2014-09-05 02:56:37 【问题描述】:我有一个大小为 11000x1085 的 cv::Mat src(类型:CV_32F)。
获取一行数据
cv::Mat dst = src.row();
如果我想从第 4 列到 1085 获取数据,我这样做。
for(int i = 0; i < 11000; i++)
for(int j = 3; j < 1085; j++)
dst.at<double>(i,j-3) = src.at<double>(i,j);
还有其他更快的方法吗?
【问题讨论】:
【参考方案1】:这取决于您是否要制作数据的深层副本。您可能希望按照本实用教程中的描述构建感兴趣区域 (ROI),该教程描述了使用 cv::Mat 构建数据的其他方法:
http://docs.opencv.org/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.html
为矩形创建感兴趣区域 (ROI):
Mat Dst (src, Rect(3, 0, 11000, 1085) );
如果你想复制数据:
Mat Clone = Dst.clone();
【讨论】:
不应该是Mat Dst (src, Rect(3, 0, 1085 - 3, 11000) );
吗?【参考方案2】:
你可以使用Mat::colRange
cv::Mat dst = src.colRange(3, 1085);
【讨论】:
以上是关于从 cv::Mat 获取部分数据的主要内容,如果未能解决你的问题,请参考以下文章
根据另一个 Mat 的非零像素选择 cv::Mat 的一部分?
如何将 cv::mat 对象从 python 模块传递给 c++ 函数并返回返回的 cv::mat 类型的对象?