从 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 类型的对象?

Opencv 在 cv::Mat 中存储 Yuyv (YCrCb)

cv::Mat 到 QImage 的奇怪行为

opencv::Mat,从原始数据中获取像素值?

关于opencv中cv::Mat设置roi