Mat-获取指定行列数据
来源:互联网 发布:求解最短路径的算法 编辑:程序博客网 时间:2024/06/05 08:48
在我们使用Mat类型的对象的时候,有时会想直接获取比如第一行的数据、最后一列的数据等等。Mat数据结构提供了这样的接口给我们使用,接口列表如下:
//! returns a new matrix header for the specified row [1]Mat row(int y) const; //! returns a new matrix header for the specified column [2]Mat col(int x) const; //! ... for the specified row span [3]Mat rowRange(int startrow, int endrow) const; [4]Mat rowRange(const Range& r) const; //! ... for the specified column span [5]Mat colRange(int startcol, int endcol) const; [6]Mat colRange(const Range& r) const;
[1][2]是获取指定某一行或者某一列的数据的接口函数,而[3]-[6]则是获取某连续几行或者几列数据的接口函数。[1]和[2]的定义如下:
inline Mat Mat::row(int y) const { return Mat(*this, Range(y, y+1), Range::all()); }inline Mat Mat::col(int x) const { return Mat(*this, Range::all(), Range(x, x+1)); }
可以看到,[1][2]都使用了Mat的一个构造函数,这在构造函数那篇博客中没有讲到。这个构造函数的定义如下:
Mat::Mat(const Mat& m, const Range& _rowRange, const Range& _colRange) : size(&rows){ initEmpty(); CV_Assert( m.dims >= 2 ); if( m.dims > 2 ) { AutoBuffer<Range> rs(m.dims); rs[0] = _rowRange; rs[1] = _colRange; for( int i = 2; i < m.dims; i++ ) rs[i] = Range::all(); *this = m(rs); return; } *this = m; if( _rowRange != Range::all() && _rowRange != Range(0,rows) ) { CV_Assert( 0 <= _rowRange.start && _rowRange.start <= _rowRange.end && _rowRange.end <= m.rows ); rows = _rowRange.size(); data += step*_rowRange.start; flags |= SUBMATRIX_FLAG; } if( _colRange != Range::all() && _colRange != Range(0,cols) ) { CV_Assert( 0 <= _colRange.start && _colRange.start <= _colRange.end && _colRange.end <= m.cols ); cols = _colRange.size(); data += _colRange.start*elemSize(); flags &= cols < m.cols ? ~CONTINUOUS_FLAG : -1; flags |= SUBMATRIX_FLAG; } if( rows == 1 ) flags |= CONTINUOUS_FLAG; if( rows <= 0 || cols <= 0 ) { release(); rows = cols = 0; }}
而[3][4][5][6]都同样调用了这个构造函数:
inline Mat Mat::rowRange(int startrow, int endrow) const { return Mat(*this, Range(startrow, endrow), Range::all()); }inline Mat Mat::rowRange(const Range& r) const { return Mat(*this, r, Range::all()); }inline Mat Mat::colRange(int startcol, int endcol) const { return Mat(*this, Range::all(), Range(startcol, endcol)); }inline Mat Mat::colRange(const Range& r) const { return Mat(*this, Range::all(), r); }
阅读全文
0 0
- Mat-获取指定行列数据
- C#DataGirdView获取行列和指定位置值的方法
- 获取指定网站数据
- 【OpenCV3】cv::Mat中的数据按行列写入txt文件中
- 获取两个Mat类型数据的协方差数据
- Java 读取excel指定行列数据以及将数据保存到txt文件中
- C#向excel的指令表单sheet指定行列中写入数据
- 指定编辑DataGrid中的行列
- matlab 指定的行列交换
- 获取非行列样式
- 如何按指定的顺序获取数据
- 如何按指定的顺序获取数据
- sql获取指定时间范围数据
- 获取DataTable指定列的数据
- Jsoup进阶之获取指定数据
- 通过HttpClient从指定server获取数据
- Django 中随机获取指定数量数据
- Jsoup进阶之获取指定数据
- 事件处理-事件流
- 所有的浏览器
- substring和substr的区别
- WINDBG本地调试WIN7
- 【elasticsearch】初识es搜索引擎,单节点安装
- Mat-获取指定行列数据
- OpenGL
- C# Show()跟ShowDialog()
- 熵
- 整理的比较好的图像去雾算法
- 启动虚拟机提示Intel VT-x处于禁用状态解决方案
- 实例2.2 一元多项式的乘法与加法运算
- C语言猜字谜游戏
- ExpandableRecycleview之简单实现